構文エラーが原因でbin / shスクリプトが失敗する:予期しないリダイレクト

構文エラーが原因でbin / shスクリプトが失敗する:予期しないリダイレクト

次に、システムシェルを使用して実行するように次のbashスクリプトを変換しようとしています。

  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}')

「sh」で実行すると、次のエラーで失敗します。

      ctest: line 14: syntax error: unexpected redirection 

bin / shで実行するように調整する方法を教えてください。

答え1

[[ ... ]]あなたが望むものの代わりに7行目[ ... ]またはtest ...(必ずいつも、いつも、いつも各変数を参照してください。すでにこれを行い[ましたが、いいえオプションであり、他の人のために繰り返す価値があります)。

if [ -x "$p" ]

行14では、次の文書を使用してプロセス置換をコマンド置換に置き換えることができます。

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

これにより、while read pサブシェルへのパイプによってサブシェルでループが実行されるのを防ぐことができ、変数が保存されます。

これはPOSIXと互換性があります。

関連情報