@Sir Athosの回答はかなり良いです。有効なエラーを無視したくない場合、または将来的に追加の方法が必要な場合は、これを参照として使用できます。
screen -ls 2>&1 | grep '(Detached)' | grep -o 'ScreenName' | xargs -I{} -n 1 -r screen -r -S {} -X quit
screen -ls 2>&1
セッションを一覧表示し、すべて標準出力に出力
grep '(Detached)'
切り離されたセッションのフィルター
grep -o 'ScreenName'
ScreenName をフィルター処理し、ScreenName のみを出力します
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>