由于 .bashrc 中的这一行,Bash 启动缓慢。什么可能导致这种情况?

BBa*_*les 20 linux bash alias bashrc bash-alias

我的.bashrc文件包含一行这样的效果:

alias prog="/path/to/script.sh $(find $(pwd) -name prog)"
Run Code Online (Sandbox Code Playgroud)

当我注释掉这一行时,当我打开一个新终端时,Bash 几乎立即启动。有了这条线,在我的光标出现之前有 4-5 秒的延迟。

删除嵌套命令$(pwd)等也会再次加快速度。为什么会这样?我还能以某种方式使用嵌套命令吗?

Joh*_*024 47

由于命令替换位于双引号内,因此在定义命令时对其进行评估。这会导致find在运行时查看您的硬盘内容.bashrc

相比之下,您似乎希望在使用时对其进行评估。在这种情况下,请使用单引号:

alias prog='/path/to/script.sh $(find "$(pwd)" -name prog)'
Run Code Online (Sandbox Code Playgroud)

请注意,如果找到的任何文件的名称中有空格,则此别名将失败。为避免这种情况:

alias prog='find . -name prog -exec /path/to/script.sh {} +'
Run Code Online (Sandbox Code Playgroud)

后一种形式对于任何类型的文件名都可以可靠地工作。

  • @el.pescado 从好的方面来说,很难想象预期的行为是在用户登录时存在的文件上运行命令,而不是在他们执行命令来处理它们时存在的文件。 (22认同)
  • 不利的一面是,现在每次键入 `prog` 时,都需要运行 `find`,而在以前,它只会运行一次(在 shell 启动时)。 (11认同)
  • @DavidRicherby 也许我们可以缓存 `prog` 的路径并在旧路径不再存在时重新运行 `find`? (2认同)