Bash:如何结合watch使用别名命令

Use*_*645 2 bash alias watch

我想在bash中结合watch命令使用alias命令.watch命令是多个链式命令.

一个非常简单的例子,我认为它会起作用(但它没有):

alias foo=some_command          # a more complicated command
watch -n 1 "$(foo) | grep bar"  # foo is not interpreted as the alias :(
Run Code Online (Sandbox Code Playgroud)

Soc*_*owi 6

watch -n 1 "$(foo) | grep sh" 出于两个原因是错误的.

  1. watch "$(cmdA) | cmdB"shell执行时,运行之前$(cmdA) 进行扩展 .然后将执行输出的作为一个命令(应在大多数情况下失败)和管道的所述输出.你可能意味着.watchwatchcmdAcmdBwatch 'cmdA | cmdB'

  2. 别名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'
Run Code Online (Sandbox Code Playgroud)

请注意,watch必须在watch别名内指定选项.尾随空格仅导致下一个单词被视为别名.使用watch -n 1 foobash会尝试扩展-n为别名,但不是foo.