私はXvfbを使って仮想フレームバッファを起動するスクリプトを書いています。コマンドが成功したことを確認したいのですが、XサーバーがシャットダウンするまでXvfbが実行を続けるため、コマンドが完了するまでスクリプトが待たないことを願っています。たとえば、
if ! Xvfb $DISPLAY &; then
echo 'Error: failed to create virtual frame buffer'
exit 1
fi
xpid=$!
# do stuff that uses frame buffer
kill $xpid
問題は構文エラーが発生することです&;
。
$ stuff.sh
stuff.sh: line 149: syntax error near unexpected token `;'
stuff.sh: line 149: `if ! Xvfb $DISPLAY &; then'
行を次に変更しようとしましたが、if ! Xvfb $DISPLAY & ;
まだエラーが発生します。
答え1
記号&
はcontrol operator
、テストするコマンドのリストを終了することです。この定義によると、以下は無料です。通事論間違い:
if ! Xvfb $DISPLAY & then
echo 'Error: failed to create virtual frame buffer'
exit 1
fi
問題は、バックグラウンドコマンドを使用すると、Xvfb
テスト結果が次のようになることです。いつも0/真です。
プロセスを開始し、消えるまで待ってからまだ残っていることを確認します。
Xvfb $DISPLAY &
xvfbpid=$!
sleep 3 ## adjust to taste
if ! ps -p $xvfbpid > /dev/null
then
echo 'Error: failed to create virtual frame buffer'
exit 1
fi
引用:
- Open Group 基本仕様 2018年7号版: シェルとユーティリティ - シェルコマンド言語 - シェルコマンド - リスト - 非同期リスト - 終了ステータス