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 파일에서는 문제가 되지 않지만 특별한 이유가 없는 한 항상 설정하는 것이 가장 좋습니다.

관련 정보