![别名中 Bash 函数的惰性计算结果](https://linux22.com/image/1131426/%E5%88%AB%E5%90%8D%E4%B8%AD%20Bash%20%E5%87%BD%E6%95%B0%E7%9A%84%E6%83%B0%E6%80%A7%E8%AE%A1%E7%AE%97%E7%BB%93%E6%9E%9C.png)
我想在 Ubuntu 中通过简单命令在当前位置打开新的终端窗口
gnome-terminal --working-directory=`pwd` & disown
对我来说,工作很好。但是当我将别名放到 bashrc 中时
alias clone="gnome-terminal --working-directory=`pwd` & disown "
pwd
在开始时计算。所以我得到了类似的结果。
$ type clone
clone is aliased to `gnome-terminal --working-directory=/home/user & disown '
是否可以pwd
仅在调用别名时进行计算。或者我需要编写除别名之外的 bash 函数?
答案1
只需在声明命令周围使用单引号,alias
以便在声明时不会发生命令替换pwd
(并且仅在调用别名时才会扩展):
alias clone='gnome-terminal --working-directory=`pwd` & disown'
也开始使用命令替换语法,$()
而不是旧的和有问题的语法``
:
alias clone='gnome-terminal --working-directory="$(pwd)" & disown'
还要注意的是,它的gnome-terminal
设计方式是,无论你什么时候做
gnome-terminal
它会打开一个新窗口,其 PID 与原始窗口相同。这是因为从设计上讲,它们是相同的进程,退出一个进程不会杀死其他进程。因此,您不需要disown
和后台运行 ( &
),只需:
alias clone='gnome-terminal --working-directory="$(pwd)"'
会做。
此外,正如 @Digital Trauma 指出的那样,gnome-terminal
始终从当前工作目录开始,因此--working-directory
不需要,因为您将其设置为pwd
。所以你可以这样做:
alias clone='gnome-terminal'