我想在 bash 中结合 watch 命令使用别名命令。watch 命令是多个链接命令。
一个非常简单的例子,我认为它会如何工作(但它不会):
alias foo=some_command # a more complicated command
watch -n 1 "$(foo) | grep bar" # foo is not interpreted as the alias :(
watch -n 1 "$(foo) | grep sh"
有两个原因是错误的。
Whenwatch "$(cmdA) | cmdB"
由 shell 执行,在运行之前$(cmdA)
被扩展 。然后将执行输出的作为一个命令(应在大多数情况下失败)和管道的所述输出。你可能的意思是.watch
watch
cmdA
cmdB
watch 'cmdA | cmdB'
别名foo
仅在当前 shell 中定义。watch
不是内置命令,因此必须在另一个不知道别名的 shell 中执行它的命令foo
。这个答案中有一个小技巧,但是我们必须进行一些调整才能使其与管道和选项一起使用
alias foo=some_command
alias watch='watch -n 1 ' # trailing space treats next word as an alias
watch foo '| grep sh'
请注意,watch
必须在watch
别名中指定选项。尾随空格导致仅将下一个单词视为别名。使用watch -n 1 foo
bash 会尝试扩展-n
为别名,而不是foo
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句