我写这个脚本是为了能够快速转到ls输出:中的第n个目录
#!/usr/bin/env bash
# cd to the nth directory in a list as produced by ls
cd $( ls | head -n$1 | tail -n1 )
我将其命名为cde并使其可执行(它在我的$PATH中(,所以现在我可以使用
. cde 3
例如,更改为3:rd目录(即我获取它的来源(。由于bash是如何为脚本创建子shell的,我不能像那样执行它
cde 3
因为只有子shell的目录受到影响。
你会怎么做才能摆脱写那个多余的点的需要,并且仍然得到想要的行为?
我本来会用一个别名来代替脚本,但我不知道怎么做,因为我不知道如何将参数传递给别名。
使用函数而不是脚本或别名!
函数比别名灵活得多,并且不像执行脚本那样创建子shell。因此,目录的更改将影响交互式("当前"(shell。
你可以定义一个函数来这样做:
# cd to the nth directory in a list as produced by ls
function cde {
cd $( ls | head -n$1 | tail -n1 )
}
将函数定义放在~/.bash_aliases文件(或其他在终端启动时获得源代码的文件,如~/.bahrc(中,就不必在每个会话中手动定义它。
它会给你想要的行为。