我想在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 :(
watch -n 1 "$(foo) | grep sh"
有两个原因是错误的。
watch "$(cmdA) | cmdB"
由shell执行时,$(cmdA)
gets expanded在运行watch
之前。然后watch
将执行cmdA
的输出作为命令(在大多数情况下应该失败)并将其输出传递给cmdB
。你可能意味着watch 'cmdA | cmdB'
。foo
仅在当前shell中定义。 watch
不是内置命令,因此必须在另一个不知道别名foo
的shell中执行它的命令。在this answer有一个小技巧,但我们必须做一些调整,使其适用于管道和选项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
。