【问题标题】:Bash: How to use an alias command in combination with watchBash:如何将别名命令与 watch 结合使用
【发布时间】:2019-07-15 19:22:57
【问题描述】:

我想在 bash 中将别名命令与 watch 命令结合使用。 watch 命令是多个链式命令。

一个非常简单的例子,我认为它会如何工作(但它不会):

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

【问题讨论】:

  • @Cyrus 这无济于事。 @PS 你是想说什么具体的吗?
  • @Socowi:你说得对。
  • 不使用别名的另一个理由——改用脚本
  • @JonathanLeffler 我喜欢别名,因为它使我的脚本更短。我只是将一个长单行定义为一个短别名并将它们链接起来。但当然,我同意不要过度使用它们

标签: bash alias watch


【解决方案1】:

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

【讨论】:

  • 非常感谢!有用。不过,我明天会深入解释;)
猜你喜欢
  • 2012-09-18
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多