如何为命令 "cd ~1" 创建 bash 别名
How to create an bash alias for the command "cd ~1"
在BASH中,我使用"pushd . "命令将当前目录保存在堆栈中。
在几个不同的目录中发出此命令后,我在堆栈中保存了多个目录,我可以通过发出命令 "dirs" 查看这些目录。
例如,我当前 bash 会话中 "dirs" 命令的输出如下 -
0 ~/eclipse/src
1 ~/日食
2~/parboil/src
现在,要切换到第 0 个目录,我发出命令 "cd ~0"。
我想为这个命令创建一个 bash 别名命令或一个函数。
像 "xya 0" 这样的东西,它将切换到堆栈上的第 0 个目录。
我写了下面的函数来实现这个 -
xya(){
cd ~$1
}
上面函数中的“$1”是传递给函数"xya"的第一个参数。
但是,我收到以下错误 -
-bash: cd: ~1: 没有那个文件或目录
你能告诉我这里出了什么问题吗?
通常,bash 解析按以下顺序进行:
- 大括号展开
- 波浪线扩展
- 参数,变量,算术展开;命令替换(同相,从左到右)
- 分词
- 路径名扩展
因此,当您的参数被扩展时,波浪号扩展已经完成并且不会再次发生,如果没有做一些明确的事情,比如使用 eval
.
如果你know the risks并且愿意接受,在</code>扩展完成后,使用<code>eval
强制从头开始解析。如果不 eval
-safe 的东西作为参数传递,下面会尝试减轻损害:
xya() {
local cmd
printf -v cmd 'cd ~%q' ""
eval "$cmd"
}
...或者,不那么谨慎(也就是说下面相信你的论点是 eval
-安全的):
xya() {
eval "cd ~"
}
你可以让dirs
为你打印绝对路径:
xya(){
cd "$(dirs -${1-0} -l)"
}
在BASH中,我使用"pushd . "命令将当前目录保存在堆栈中。 在几个不同的目录中发出此命令后,我在堆栈中保存了多个目录,我可以通过发出命令 "dirs" 查看这些目录。 例如,我当前 bash 会话中 "dirs" 命令的输出如下 -
0 ~/eclipse/src
1 ~/日食
2~/parboil/src
现在,要切换到第 0 个目录,我发出命令 "cd ~0"。 我想为这个命令创建一个 bash 别名命令或一个函数。 像 "xya 0" 这样的东西,它将切换到堆栈上的第 0 个目录。 我写了下面的函数来实现这个 -
xya(){
cd ~$1
}
上面函数中的“$1”是传递给函数"xya"的第一个参数。
但是,我收到以下错误 -
-bash: cd: ~1: 没有那个文件或目录
你能告诉我这里出了什么问题吗?
通常,bash 解析按以下顺序进行:
- 大括号展开
- 波浪线扩展
- 参数,变量,算术展开;命令替换(同相,从左到右)
- 分词
- 路径名扩展
因此,当您的参数被扩展时,波浪号扩展已经完成并且不会再次发生,如果没有做一些明确的事情,比如使用 eval
.
如果你know the risks并且愿意接受,在</code>扩展完成后,使用<code>eval
强制从头开始解析。如果不 eval
-safe 的东西作为参数传递,下面会尝试减轻损害:
xya() {
local cmd
printf -v cmd 'cd ~%q' ""
eval "$cmd"
}
...或者,不那么谨慎(也就是说下面相信你的论点是 eval
-安全的):
xya() {
eval "cd ~"
}
你可以让dirs
为你打印绝对路径:
xya(){
cd "$(dirs -${1-0} -l)"
}