在Bash中将pidof管道与wc -l一起使用不会返回预期的0值

时间:2019-05-01 05:32:07

标签: bash pipe wc

场景

我正在尝试以下代码,以确保一次仅运行一次此bash:

this_bash=$(basename $0)
this_pid=${$}
is_running="$(pidof -x $this_bash -o $this_pid | wc -l )"

我发现它总是返回1,即使没有运行任何同名的bash。

调查

为进一步检查,我尝试了此操作:

z=$(pidof -x $this_bash -o $this_pid)
echo "[$z]"
echo "[$(pidof -x $this_bash -o $this_pid)]"

echo "[$($z | wc -l )]"
echo "[$(pidof -x $this_bash -o $this_pid | wc -l )]"

方括号应确保没有隐藏的空格字符。
结果是:

[]
[]
[0]
[1]

问题

我不明白为什么将pidof存储为变量会返回预期的结果,而直接通过管道传递命令却不会。

0 个答案:

没有答案