Уничтожение нескольких сессий экрана GNU с тем же именем

Попытайтесь передать вывод по каналу от своего grep в

awk 'BEGIN {total=0;}{total+=$1;}END {print "Total: ",total}'
6
10.09.2011, 23:41
4 ответа

Если нет никого другого screen сессии, выполняющие Вас, могут использовать "твердый" путь и просто kill их с killall screen.

Если Вы хотите быть хорошими, можно выполнить итерации по списку экранных сессий и уничтожить их один за другим:

# screen -S foo && screen -S foo
[detached]
[detached]
# screen -ls
There are screens on:                                                                                                                                                                                      
        8350.foo        (Detached)                                                                                                                                                                         
        8292.foo        (Detached)                                                                                                                                                                         
2 Sockets in /tmp/screens/S-joschi.                                                                                                                                                                        

# This is the interesting line. Just replace "foo" with the name of your session(s)
# for session in $(screen -ls | grep -o '[0-9]*\.foo'); do screen -S "${session}" -X quit; done
# screen -ls
No Sockets found in /tmp/screens/S-joschi.
10
27.01.2020, 20:23
  • 1
    , к сожалению, существуют другие экраны, которые я не хочу уничтоженный. –  dukevin 10.09.2011, 11:39
  • 2
    Вот почему я также обеспечил "хорошую" версию. ;) –  joschi 10.09.2011, 11:41
  • 3
    'Хорошая' версия не работает на меня –  Jack Nicholson 19.07.2016, 01:26

screen -ls "$SESSION_NAME" перечисляет полные имена соответствия сессиям на расположенных с отступом вкладкой строках. Таким образом, можно выполнить итерации на этих строках, извлеките полные имена и звоните quit команда на каждом имени соответствия.

SESSION_NAME='haydoz-script'
screen -ls "$SESSION_NAME" | (
  IFS=$(printf '\t');
  sed "s/^$IFS//" |
  while read -r name stuff; do
      screen -S "$name" -X quit
  done
)
4
27.01.2020, 20:23
  • 1
    Что stuff? –  Andy Ray 12.05.2016, 07:03
  • 2
    @user53145 переменная, которая содержит слова вывода от screen -ls после первого, которое является именем сессии. Если Вы записали read -r name stuff затем name содержал бы целую строку (кроме ведущих пробелов), но мы только хотим первое слово. –  Gilles 'SO- stop being evil' 12.05.2016, 10:30
  • 3
    Какой файл - это? Как я выполняю его. Ввод его в консоли не будет работать –  Jack Nicholson 19.07.2016, 01:23
  • 4
    @JackNicholson, Это - отрывок оболочки. Это должно работать на любой оболочке sh-стиля (тире, удар, ksh, zsh, …). –  Gilles 'SO- stop being evil' 19.07.2016, 01:52
  • 5
    я поражен Ваш код, работало! Испытанные затруднения из-за этого целую вечность.Спасибо. Я закончил тем, что поместил его в .sh файл и выполнение sh kill.sh –  Jack Nicholson 19.07.2016, 11:11

Присоедините к экрану и затем выполните другую экранную команду:

screen -x "Name" -x -X kill
-2
27.01.2020, 20:23

Вот один -вкладыш. Вам нужно заменить your_sessionна нужный.

screen -ls your_session | grep -E '\s+[0-9]+\.' | awk -F ' ' '{print $1}' | while read s; do screen -XS $s quit; done

1
27.01.2020, 20:23

Теги

Похожие вопросы