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

问题描述 投票:1回答:1

我想在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 :(
bash alias watch
1个回答
5
投票

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

  1. watch "$(cmdA) | cmdB"由shell执行时,$(cmdA) gets expanded在运行watch之前。然后watch将执行cmdA的输出作为命令(在大多数情况下应该失败)并将其输出传递给cmdB。你可能意味着watch 'cmdA | cmdB'
  2. 别名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

© www.soinside.com 2019 - 2024. All rights reserved.