プロセスを終了し、結果を比較します。

プロセスを終了し、結果を比較します。

私は単純な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

実際にコードでは。diffkillprogram()

スクリプトのもう1つの潜在的な問題は、;の終了を待つkillように設計されていないことです。program代わりに信号のみを送信します。したがって、diff出力全体がキャプチャされずに競合状態が機能することがわかりますprogramwait組み込みのbashバックグラウンドプロセスが終了するまで、プログラムで待つことをお勧めします。

上記の修正を含むコード例は次のとおりです。

#!/bin/bash
(
    ./program <input1.txt &
    PID=$!
    sleep 1
    kill -INT $PID
    wait
) | diff -y reference_output.txt -

おすすめ記事