我编写此脚本是为了能够快速进入ls输出中的n:th目录:
#!/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
因为仅影响子外壳程序的目录。
您将如何摆脱必须写多余的点并仍然获得期望的行为?
我会为此使用别名而不是脚本,但是由于不知道如何将参数传递给别名,因此我无法弄清楚该怎么办。
答案 0 :(得分:3)
使用函数代替脚本或别名!
函数比别名更灵活,并且不像执行脚本那样创建子shell。因此,目录的更改将影响您的交互式(“当前”)外壳。
您可以这样定义一个函数:
# cd to the nth directory in a list as produced by ls
function cde {
cd $( ls | head -n$1 | tail -n1 )
}
将功能定义放入〜/ .bash_aliases文件(或在终端启动时获取的其他文件,如〜/ .bashrc)中,而无需在每个会话中手动定义它。
它将为您提供所需的行为。