为什么“watch”命令对别名不起作用?

为什么“watch”命令对别名不起作用?

因此,我创建了自定义的别名命令并尝试将其与一起使用alias,但我的别名在与命令连接时无法被识别watch

所以我试着把它串联起来,幸运的是,有一个人帮助了我。

但这是什么原因呢?

我在我的系统中创建了一个别名.bashrc,它工作得很好。

alias gpu='sensors nouveau-pci-0100'
alias cpu='sensors coretemp-isa-0000'

当我像这样连接watchgpu

watch GPU

我每 2 秒就会得到以下信息:

sh: 1: gpu: not found

我根据上面提到的线索解决了这个问题:

alias = watchh='watch '
watchh gpu

但为什么会发生这种情况?为什么它不能使用我明确定义的别名命令?

我猜是用户因为我已经 root 过一次了,所以我无法使用我的别名,但我确实需要一位专家来回答这个问题。

答案1

和用户没关系。

别名仅在交互的它们所针对的 shell 定义 -例如,如果您通过 定义它们,则为交互式 bash shell ~/.bashrc,或者如果您在 中定义它们,则为交互式 zsh shell 。~/.zshrc

watch命令通过-交互式/bin/sh外壳。

通过为其watch自身添加别名,即alias watchh='watch '(以空格结尾),然后使用watchh gpu,可以强制当前交互式 shell 扩展gpu 它被传递给了watch

请注意,在 中zsh,别名可以定义为全球的这使得它们可以在命令中的任何位置扩展 - 避免使用watch尾随空格作为别名。

答案2

watch命令不会定位别名,只会定位搜索路径中的命令。作为替代方案,将gpu和定义cpu为 shell 脚本而不是别名,并将它们放在搜索路径中。然后您的watch gpuwatch cpu命令将正常工作。

例如,如果$HOME/bin是搜索路径中的目录,则创建一个$HOME/bin/gpu包含以下行的文件:

sensors nouveau-pci-0100

使文件可执行:

$ chmod +x $HOME/bin/gpu

您就可以出发了!

$ watch gpu

然后对 执行相同操作cpu

相关内容