[英]How to create an bash alias for the command “cd ~1”
在 BASH 中,我使用“pushd.”命令将当前目录保存在堆栈上。 在几个不同的目录中发出此命令后,我在堆栈上保存了多个目录,我可以通过发出命令“dirs”看到这些目录。 例如,我当前的 bash session 中的“dirs”命令的 output 如下 -
0 ~/eclipse/src
1 ~/日食
2 ~/parboil/src
现在,要切换到第 0 个目录,我发出命令“cd ~0”。 我想为此命令创建一个 bash 别名命令或 function。 像“xya 0”这样的东西,它将切换到堆栈上的第 0 个目录。 我写了以下 function 来实现这一点 -
xya(){
光盘〜$ 1
}
其中 function 中的“$1”是传递给 function“xya”的第一个参数。
但是,我收到以下错误 -
-bash: cd: ~1: 没有这样的文件或目录
你能告诉这里出了什么问题吗?
通常,bash 解析按以下顺序进行:
因此,当您的参数被扩展时,波浪号扩展已经完成并且不会再次发生,而无需执行诸如使用eval
之类的明确操作。
如果你知道风险并愿意接受,在$1
的扩展完成后,使用eval
强制解析从头开始。 如果将不eval
-safe 的东西作为参数传递,下面会尝试减轻损害:
xya() {
local cmd
printf -v cmd 'cd ~%q' "$1"
eval "$cmd"
}
...或者,不那么谨慎(也就是说,下面相信您的 arguments 是eval
安全的):
xya() {
eval "cd ~$1"
}
您可以让dirs
为您打印绝对路径:
xya(){
cd "$(dirs -${1-0} -l)"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.