【问题标题】:meaning of + '[' ']' in bash -ex output [duplicate]bash -ex 输出中 + '[' ']' 的含义 [重复]
【发布时间】:2018-08-11 00:16:15
【问题描述】:

'[' ']' 在此输出中表示什么?

$ bash -ex ~/bin/client_services 
+ : starting daemons reqd. for clients
++ ps aux
++ grep -q memcached
+ '[' ']'

我的源文件是:

if [ `ps aux | grep -q memcached` ]; then
  echo 'Memcached exists'
fi

【问题讨论】:

  • 这意味着你的命令替换没有任何输出。
  • 将代码更改为 if ps aux | grep -q memcached; then 以直接测试您的 grep 命令的退出状态,而不使用 [ 尝试(错误地,在这种情况下,由于引用错误)评估首先是它的标准输出。
  • ...或者,如果您真的想要收集输出并测试它是否为空,请添加引号:if [ "$(ps aux | grep memcached)" ] - 请注意没有-q。不过,这比较慢,而且有更多的移动部件。
  • ...也就是说,一般来说,测试ps 的输出是一种代码味道——这意味着您没有使用操作系统的进程监督工具以更健壮的方式管理守护进程方法。在现代基于 systemd 的 Linux 发行版上,这可能是 if systemctl is-active memcached; then ...;有类似的工具可以查询Upstart、launchd、runitdaemontools等;并且可以将它们设置为自动重新启动您的守护程序或在它们失败时触发任意事件。
  • ...请记住,grep memcached 将出现在 grep memcached 中。 vim memcached.conf 也是如此。所以ps auxw | grep 也有其他原因; pgrep 是一个专门构建的工具,可以避免一些这些错误。

标签: bash


【解决方案1】:

你在这里说的是 bash 的调试 -x 标志的输出。首先它必须运行ps aux,然后它必须运行grep ...。然后它必须测试结果。 [...] 测试语法本身就是一个表达式,也必须进行评估。

+ '[' ']' 表示正在执行的测试,bash -x 向您显示。

【讨论】:

    【解决方案2】:

    表示ps aux | grep -q memcached 扩展为空字符串。

    如果没有,你会得到它扩展成的样子。

    例如, ps aux | grep -q memcached 打印

    ++ echo true
    + '[' true ']'
    

    【讨论】:

      猜你喜欢
      • 2017-10-13
      • 1970-01-01
      • 2020-01-06
      • 2020-03-18
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多