~/.bash_aliases
我正在使用 nautilus 文件管理器并使用以下行创建文件
alias naut="nautilus $(pwd) >/dev/null 2>&1 & disown;"
然后我执行
source ~/.bashrc
然后当我输入命令时naut
,文件管理器不会在pwd
目录中打开,而是在上次执行的目录中打开source ~/.bashrc
。这很奇怪,因为当我创建别名时
alias naut="pwd; nautilus $(pwd) > /dev/null 2>&1 & disown;"
该命令naut
始终返回我的实际工作目录,同时在另一个目录中打开 nautilus。
这怎么可能?
答案1
man bash
:
将字符括在双引号中会保留引号内所有字符的文字值,但启用历史扩展时的
$
、`
、 和 除外。字符和在双引号内保留其特殊含义。反斜杠仅在后跟以下字符之一时才保留其特殊含义: 、、、或 <newline>。可以在双引号内通过在双引号前面加上反斜杠来引用双引号。如果启用,除非使用反斜杠对双引号中的 进行转义,否则将执行历史扩展 。 之前的反斜杠不会被删除。\
!
$
`
$
`
"
\
!
!
因此,您的定义$(pwd)
在别名定义时被展开,而不是在执行时。在别名定义的右侧使用单引号。
另一方面,正如 Bharadwaj Raju 所观察到的,当前工作目录始终是.
,因此nautilus "$(pwd)"
与 相同nautilus .
。并且您可能希望在 周围加上双引号$(pwd)
。