【发布时间】: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、runit、daemontools等;并且可以将它们设置为自动重新启动您的守护程序或在它们失败时触发任意事件。 -
...请记住,
grep memcached将出现在grep memcached中。vim memcached.conf也是如此。所以ps auxw | grep也有其他原因;pgrep是一个专门构建的工具,可以避免一些这些错误。
标签: bash