bin / sh script falha com erro de sintaxe: redirecionamento inesperado

1

Eu tenho o seguinte script bash que estou tentando converter para executar usando o shell do sistema:

  1 #!/bin/sh
  2 #testtotal
  3 lines="$(crontab -l | awk '{if(NR>2)print}')"
  4 echo "1..$lines"
  5 counter=1
  6 while read p; do
  7         if [[ -x "$p" ]]
  8         then
  9             echo "ok $counter - $p is executable"
 10         else
 11             echo "not ok $counter - $p is not executable or found"
 12         fi
 13         counter=$((counter+1))
 14 done < <(crontab -l | awk '{if(NR>2)print}' | awk '{print $6}')

quando eu executo usando "sh" ele falha com o erro:

      ctest: line 14: syntax error: unexpected redirection 

Você pode me dizer como adaptar isso para rodar em bin / sh?

    
por dot 22.03.2018 / 20:41

1 resposta

3

Na linha 7, em vez de [[ ... ]] , você quer [ ... ] ou test ... (certificando-se de que sempre, sempre, sempre cite todas as variáveis - o que você já fez, mas com [ não é opcional e vale a pena repetir para todo mundo ler).

if [ -x "$p" ]

Na linha 14, você pode usar um documento aqui combinado com uma substituição de comando para substituir a substituição do processo:

done <<EOF
$(crontab -l | awk 'NR > 2 { print $6 }')
EOF

Dessa forma, você evita executar o loop while read p em um subshell devido a piping nele, para que suas variáveis sobrevivam.

Isso deve ser feito para tornar esse POSIX compatível.

    
por 22.03.2018 / 20:50