ファイルの出力が「b\na」と等しくなるまでファイル「a.out」を実行する bash 式を書きたいと思います。「\n」は改行です。
質問する
131 次
5 に答える
2
これは、結果を定量化するのにも役立ちます。
let ab=0 ba=0
for (( i=0; i<1000; ++i )); do
case "$(./a.out)" in
$'a\nb') let ab+=1;;
$'b\na') let ba+=1;;
esac
done
echo "a\\nb: $ab times; b\\na: $ba times"
于 2013-05-16T21:42:09.813 に答える
2
どうぞ:
#/bin/bash
a.out | while :
do
read x
read y
[[ $x == 'b' && $y == 'a' ]] && break
echo $x $y
done
Ubuntu 13.04 の bash でこれをテストしました。
于 2013-05-16T20:55:40.130 に答える
1
これはうまくいくはずです:
./a.out | while read line; do
[[ $s == 1 && $line == 'a' ]] && break
s=0
[[ $line == 'b' ]] && s=1
done
やり過ぎの方法:
mkfifo myfifo
./a.out > myfifo &
pp=$!
while read line; do
[[ $s == 1 && $line == 'a' ]] && break
s=0
[[ $line == 'b' ]] && s=1
done < myfifo
kill $pp
rm myfifo
于 2013-05-16T21:38:57.603 に答える
0
何かのようなもの
./a.out | sed '/^b$/!b;:l;n;/^b$/bl;/^a$/q'
変換: 現在の入力行が一致しない場合^b$
(行頭、b、行末)、次の入力行からやり直します。それ以外の場合は、次の入力行をフェッチします。別の を取得する限り、^b$
読み続けます。一致しない場合は、^a$
読むのをやめて終了します。
:l
ラベルを宣言するので、while ループのどこかに戻ることができます。b
明示的なラベルがない場合は、スクリプトの最後に分岐します (次の入力行からやり直します)。
于 2013-05-16T20:55:00.107 に答える