Erro ao usar 'if' com a contagem em Bash [closed]

3

O que há de errado com o seguinte? Eu recebo um erro [: 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
    
por Vas 03.08.2018 / 22:19

1 resposta

5

Melhorou ainda mais os agradecimentos a Kusalananda.

  • O teste do conteúdo do arquivo não é necessário, pois o loop while read não será executado em um arquivo vazio.
  • Você poderia simplesmente usar [ -s pid.txt ] || rm pid.txt para remover o arquivo pid. No entanto, , você realmente tem um motivo para manter o arquivo após o processamento? Parece provável que você queira removê-lo independentemente.
while read -r line
do
    kill "$line"
done < pid.txt
[ -s pid.txt ] || rm pid.txt

Um loop while read está sendo usado de for $(cat ...) . Não leia as linhas com .

A opção -r especifica "não permitir que as barras invertidas escapem de nenhum caractere", o que não deveria ser um problema em um arquivo de pids, mas é uma prática recomendada sempre que houver um motivo específico para não.

    
por 03.08.2018 / 22:38