GNU Screenが実行されているかどうかを検出するロジック

GNU Screenが実行されているかどうかを検出するロジック

私が作業しているプロジェクトの場合は、画面が現在ユーザーとして実行されている(接続または切断)を検出したいと思います。私は最小限のプロセスを使用し、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を見つけたので、移植性が必要です。

関連情報