私が作業しているプロジェクトの場合は、画面が現在ユーザーとして実行されている(接続または切断)を検出したいと思います。私は最小限のプロセスを使用し、distro / unixベースのオペレーティングシステム間で移植可能な方法を望んでいます。
オプション1
ps -U $USER|grep screen|grep -v grep &>/dev/null && screen-yes
これは乱雑に見えますが、作業を完了します。 Darwinでは追加のgrepが必要ですが、CentOSではそうではありません。より良い方法はありますか?
オプション2
screen -list|egrep '(There is a screen on|There are screens on)' &>/dev/null && screen-yes
これはscreenコマンドを直接使用しますが、比較的人間に優しい出力スタイルのために大きな正規表現が必要です。
もっと良い方法がありますか?
答え1
画面の戻りコードを使用できる必要があります。画面がある場合は True、画面がない場合は False です。
screen -list >/dev/null && screen-yes
答え2
私の解決策はオプション1のバリエーションです。
ps -U $USER | grep [s]creen &>/dev/null && screen-yes
文字列の最初の文字の周りの角かっこは、シェルglobマジックを使用して出力にコマンドが返されるのをscreen
防ぎます。grep
同じ最終結果、grep
コマンドが1つ減ります。
答え3
if test ! -z "$STY"
then
echo "I am running in GNU Screen"
fi
外部プログラムを必要としない迅速なソリューションです。
答え4
pgrep -U $USER screen &>/dev/null && screen-yes
これは追加のプロセスを必要とせず、オプション2で> 1プロセスを使用して、比較的長い正規表現を含むオプション1の問題を解決します。かなり古いシステムでpgrepを見つけたので、移植性が必要です。