次に、システムシェルを使用して実行するように次の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と互換性があります。