我写了一个小脚本,可以让我切换到路径上的脚本目录,这有助于我快速找到我想要编辑的其他脚本,与原始脚本位于同一文件夹中。
我倾向于通过回顾历史来做到这一点,并为该命令加上前缀,无论它是什么,就像这样
$ . cdbin my_super_script
这在大多数情况下都有效 - 但是 - 当我运行的最后一个命令在某处通过管道传输时,它不起作用,
例如
# if my last command was the following
$ my_super_script | grep -v bad | grep good
# then when I try and run my cdbin script using history, it looks like this
$ . cdbin my_super_script | grep -v bad | grep good
然后它什么也没做 - 没有错误,它只是让我留在我的当前目录中。
这是我的简单cdbin
脚本:
cdbin
PROG=$(which "$1")
DIR=$(dirname "$PROG")
cd "$DIR"
编辑:请注意,我知道我可以在大多数情况下简单地输入类似以下内容来避免这种情况,例如,$ . cdbin !:0
但发现输入有点尴尬:D
当您使用管道运行此命令时,您的
. cdbin
命令在子shell 中运行:因此它会更改子shell 中的目录,并且当子shell 关闭时效果会丢失。为避免这种情况,由于您只对之前运行的命令感兴趣,请使用历史记录:
这将提取上一个命令的第一个单词,因此在您的场景中,您最终会得到
您可以改用
fc
提取前面的命令:可以将其转换为别名以使其更易于使用,或者使其成为
cdbin
自身的一部分,例如,如果在没有任何参数的情况下调用它: