【问题标题】:Passing parentheses to command in bash function将括号传递给bash函数中的命令
【发布时间】:2020-11-20 18:33:38
【问题描述】:

我想在我的 bash 配置文件中创建一个类似这样的函数。

postfix_log() {
    log stream --predicate (process == "smtpd") || (process == "smtp") --info
}

Bash 讨厌这样。

-bash: /Users/me/.bash_profile: 第 112 行:意外标记 `(' 附近的语法错误

-bash: /Users/me/.bash_profile: 第 112 行:`postfix_log() {'

我也尝试过将其放入别名中。

alias postfix_log="log stream --predicate (process == 'smtpd') || (process == 'smtp') --info"

但是,当我运行该别名时,log 无法理解该命令。

log: Bad predicate (Unable to parse the format string "(process"): (process -bash:(进程:找不到命令

如何在 bash 函数中使用括号作为命令的参数?

【问题讨论】:

  • 让我知道这是否有效:尝试将函数修改为log stream --predicate '(process == "smtpd") || (process == "smtp")' --info

标签: bash macos


【解决方案1】:

您需要引用过滤器表达式,告诉 shell 将其作为文字参数传递给 log 命令,而不是尝试将其解析为 shell 语法(这是导致错误的原因)。

log stream --predicate '(process == "smtpd") || (process == "smtp")' --info

请注意,--predicate--info 不是表达式的一部分,因此不应将它们包含在引用的部分中。

(顺便说一句,man page for the log command 包含几个显示如何引用表达式的示例。)

【讨论】:

  • 确实如此。不管怎样,谢谢。
猜你喜欢
  • 2021-04-30
  • 2018-02-13
  • 2021-11-25
  • 2023-01-11
  • 2023-04-05
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
相关资源
最近更新 更多