在 Bash 中使用“if”进行计数时出错

在 Bash 中使用“if”进行计数时出错

以下有什么问题吗?我收到一个[: too many arguments错误。

if [ 'wc -l pid.txt | awk '{print $1}'' -ge "1" ]
then
    for line in $(cat pid.txt)
    do
        kill $line
    done
else
    rm pid.txt
fi

答案1

感谢善行,进一步进步。

  • 不需要测试文件的内容,因为while read循环不会在空文件上运行。
  • 然后您可以简单地使用[ -s pid.txt ] || rm pid.txt删除 pid 文件。然而,你真的有理由保留处理后的文件吗?无论如何,您似乎都想将其删除。

while read -r line
do
    kill "$line"
done < pid.txt
[ -s pid.txt ] || rm pid.txt

while read正在使用循环而不是for $(cat ...)不要用 for 读取行

-r选项指定“不允许反斜杠转义任何字符”,这在 pid 文件中实际上不应该成为问题,但最好的做法是始终进行设置,除非有特定原因不这样做。

相关内容