0

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

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

巴什讨厌这样。

-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无法理解该命令。

日志:坏谓词(无法解析格式字符串“(进程”):(进程-bash:(进程:找不到命令

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

4

1 回答 1

2

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

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

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

(顺便说一句,该命令的man页面log包含几个显示如何引用表达式的示例。)

于 2020-07-31T01:13:38.487 回答