
次のような一連のスクリプトを実行する単純なbashループがあります。
#!/bin/bash
for (( c=0; c<=200; c++ ))
do
php ./script.php $1
done
loop
スクリプトからoutput
echo
edを壊すことは可能ですかphp
?
答え1
おそらく、このようなことを意味しているのでしょうか?
#!/bin/bash
for (( c=0; c<=200; c++ ))
do
output=$(php ./script.php "$1")
case $output in
*'foo'*) echo "Loop terminated"; break;;
esac
echo "$output"
done
に触発された@Archemar の回答こうも言えるでしょう
#!/bin/bash
for (( c=0; c<=200; c++ ))
do
! php ./script.php "$1" | grep -v 'foo' || break
done
答え2
script.php が 0 以外の値を返す可能性がある場合。
...
do
if ! php ./script.php $1
then break
fi
done
./
script.phpの前に必要かどうかはわかりませんループ構文もよくわかりませんが、bashについて学びました
「出力」をフィルタリングする
if php script.php $1 | grep --quiet output
then break
fi
こうすることで、戻りコードがgrep
返されます。if
答え3
次のように試すことができます:
output=$(php script.php "$1")
if [ $output = "{End output}" ]
then
break
fi
これで、PHP スクリプトを次のように変更するだけです。
...
echo '{End output}';
...
アップデート:
アドバイスをくれた tripleee に感謝します。変更しました (彼がそう思ってくれたことを願っています :-) )