1

切り離されたスクリーンセッションが存在する場合、それを強制終了するシェルスクリプトがあります。スクリプトは

if ! screen -list | grep -q "ScreenName"; then
  screen -S ScreenName -X quit
fi

残念ながら、スクリプトを実行すると screen -S ... -X quit コマンドが常に bc を実行し、screen セッションが存在しないようで、「No screen sessions found」と出力されます。を外すと!screen セッションが実行されていても、実行中のセッションは強制終了されません。

問題は何でしょうか?ありがとう

4

3 に答える 3

1

@Sir Athosの回答はかなり良いです。有効なエラーを無視したくない場合、または将来的に追加の方法が必要な場合は、これを参照として使用できます。

screen -ls 2>&1 | grep '(Detached)' | grep -o 'ScreenName' | xargs -I{} -n 1 -r screen -r -S {} -X quit
  1. screen -ls 2>&1セッションを一覧表示し、すべて標準出力に出力
  2. grep '(Detached)'切り離されたセッションのフィルター
  3. grep -o 'ScreenName'ScreenName をフィルター処理し、ScreenName のみを出力します
  4. xargs -I{} -n 1 -r screen -r -S {} -X quit-n 1一度に 1 つずつxargs を介して出力を実行し、出力-rがない場合は実行しない-I{}でください。{} は最後ではないため、引数の置換場所として使用し、コマンドを実行します。

コードサンプル:

evan> screen -ls  
There are screens on:  
        15491.pts-2.x      (08/29/2013 10:43:53 AM)        (Detached)  
        31676.pts-41.x     (08/28/2013 10:55:00 AM)        (Attached)  
2 Sockets in /var/run/screen/S-evan.  

evan> screen -ls 2>&1 | grep '(Detached)' | grep -o '15491.pts-2.x' | xargs -I{} -n 1 -r screen -r -S {} -X quit  

evan> screen -ls  
There is a screen on:  
        31676.pts-41.x     (08/28/2013 10:55:00 AM)        (Attached)  
1 Socket in /var/run/screen/S-evan.  

evan> screen -ls 2>&1 | grep '(Detached)' | grep -o '15491.pts-2.x' | xargs -I{} -n 1 -r screen -r -S {} -X quit

evan>  
于 2013-08-29T18:01:06.490 に答える