私は単純なbashスクリプトを書こうとしましたが、うまくいきません。
私が欲しい:
- プログラムを起動し、テキストファイルの入力を提供します(
./prog < input1.txt
)。 - しばらく待ってからキーボードで邪魔されたように終了します(
& PID=$!; sleep 1; kill -INT $PID
)。源泉 - プログラム出力とテキストファイルの違いを見つける(
| diff -y output1.txt -
)源泉
これが私が今持っているものです。前の手順をまとめると、次のようになります。
./program < input1.txt & PID=$!; sleep 1; kill -INT $PID | diff -y output1.txt -
このバージョンではPID行が非表示になっているため、最初のコマンドの出力は常に報告されません。プログラム名の後にファイルリダイレクトを追加すると、リダイレクトを指すため、killコマンドは機能しなくなります。
bash --version
編集:Ubuntu 16.04を使用しています。GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
ベストアンサー1
実際にコードでは。diff
kill
program
()
スクリプトのもう1つの潜在的な問題は、;の終了を待つkill
ように設計されていないことです。program
代わりに信号のみを送信します。したがって、diff
出力全体がキャプチャされずに競合状態が機能することがわかりますprogram
。wait
組み込みのbashバックグラウンドプロセスが終了するまで、プログラムで待つことをお勧めします。
上記の修正を含むコード例は次のとおりです。
#!/bin/bash
(
./program <input1.txt &
PID=$!
sleep 1
kill -INT $PID
wait
) | diff -y reference_output.txt -