影响启动它的交互式shell的脚本



我写这个脚本是为了能够快速转到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(中,就不必在每个会话中手动定义它。

它会给你想要的行为。

最新更新