我的.bashrc
文件包含一行这样的内容:
alias prog="/path/to/script.sh $(find $(pwd) -name prog)"
当我注释掉这行代码时,打开新终端时 Bash 几乎立即启动。使用此行代码后,光标出现之前会有 4-5 秒的延迟。
删除嵌套命令$(pwd)
等也会再次加快速度。为什么会发生这种情况?我还能以某种方式使用嵌套命令吗?
答案1
因为命令替换在双引号内,所以在定义命令时对其进行评估。这会导致在运行find
时查看硬盘内容。.bashrc
相反,您似乎希望在使用时对其进行评估。 在这种情况下,使用单引号:
alias prog='/path/to/script.sh $(find "$(pwd)" -name prog)'
请注意,如果找到的任何文件的名称中有空格,此别名将失败。为了避免这种情况:
alias prog='find . -name prog -exec /path/to/script.sh {} +'
后一种形式对于任何类型的文件名都可靠地起作用。