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

Yol*_*Wex 15 alias users watch-command

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

所以我试着把它写成一条线索,幸运的是,这个线索帮助了我。

但这是什么原因呢?

我在 my 中创建了一个别名.bashrc,效果非常好。

alias gpu='sensors nouveau-pci-0100'
alias cpu='sensors coretemp-isa-0000'
Run Code Online (Sandbox Code Playgroud)

当我连接watchgpu喜欢这样时:

watch GPU
Run Code Online (Sandbox Code Playgroud)

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

sh: 1: gpu: not found
Run Code Online (Sandbox Code Playgroud)

我就上面提到的线程解决了这个问题,如下所示:

alias = watchh='watch '
watchh gpu
Run Code Online (Sandbox Code Playgroud)

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

我的猜测是,这与用户有关,因为我已经root过一次,并且无法使用我的别名,但我确实需要专家来回答这个问题。

ste*_*ver 21

与用户无关。

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

该命令通过交互式shellwatch调用命令。/bin/sh

通过给watch自身起别名,as alias watchh='watch '(带有尾随空格)然后使用watchh gpu,可以强制当前交互式 shell在传递给gpu 之前watch展开。

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


Dan*_*anB 5

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

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

sensors nouveau-pci-0100
Run Code Online (Sandbox Code Playgroud)

使文件可执行:

$ chmod +x $HOME/bin/gpu
Run Code Online (Sandbox Code Playgroud)

现在您就可以出发了!

$ watch gpu
Run Code Online (Sandbox Code Playgroud)

然后对 执行同样的操作cpu

  • @YoloWex 有什么东西阻止你制作一个吗? (2认同)