因此,我创建了自定义的别名命令并尝试将其与一起使用alias
,但我的别名在与命令连接时无法被识别watch
。
所以我试着把它串联起来,幸运的是,这有一个人帮助了我。
但这是什么原因呢?
我在我的系统中创建了一个别名.bashrc
,它工作得很好。
alias gpu='sensors nouveau-pci-0100'
alias cpu='sensors coretemp-isa-0000'
当我像这样连接watch
时gpu
:
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 gpu
和watch cpu
命令将正常工作。
例如,如果$HOME/bin
是搜索路径中的目录,则创建一个$HOME/bin/gpu
包含以下行的文件:
sensors nouveau-pci-0100
使文件可执行:
$ chmod +x $HOME/bin/gpu
您就可以出发了!
$ watch gpu
然后对 执行相同操作cpu
。