Как запустить вторую команду в том же сеансе экрана

12

Я запускаю первую команду на экране следующим образом:

screen -d -m -S testen -t lalala watch df -h

который дает мне сеанс экрана, работающий в фоновом режиме, и я могу подключиться позже.

Как я могу запустить вторую команду в новом окне в том же сеансе экрана?

TTM
источник

Ответы:

11

Запустите именованный сеанс экрана ( -S) с именованным window ( -t), адаптирующимся к размеру терминала ( -A) в отдельном режиме ( -d -m):

screen -S mySessionName -t myWinName0 -A -d -m

Запустите другое именованное окно ( -t) в том же сеансе экрана ( -S):

screen -S mySessionName -X screen -t myWinName2

Вставьте несколько команд ( -X stuff $'cmds') в первое именованное окно ( -p) в сеансе ( -S):

screen -S mySessionName -p myWinName0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'

Вставьте несколько команд ( -X stuff $'cmds') во второе именованное окно ( -p) в сеансе ( -S):

screen -S mySessionName -p myWinName1 -X stuff $'echo myWinName1\necho cmd1\necho cmd2\n'

Перечислите сеансы экрана и подключите, чтобы увидеть, что произошло:

screen -ls
screen -r mySessionName

Примечание: перевод строки ( \n) имитирует нажатие Enter. Вы также можете использовать точки с запятой для разделения команд.

почтовый
источник
Вам не нужно делать "вещи" биты. screen -S sessionName -t windowName1 -Adm <command> && screen -S sessionName -X screen -t windowName2 -Adm <command2>
Lotus
4

Внутренний экран:

  • Ctrl-A, cчтобы открыть новое окно оболочки
  • Ctrl-A, :screen newcmdчтобы запуститьnewcmd

За пределами:

screen -X testen "screen newcmd"
user1686
источник
привет grawity , я знаю это, но я хотел бы сделать это из скрипта инициализации. в основном я хочу запустить 2 команды в отдельных окнах в одном сеансе экрана. увидимся
1
@bob: См. пример № 3 «Внешний экран» в этом ответе.
user1686
привет, screen -S testen -X 'screen echo "hi"'не работает.
Я также не смог заставить работать метод -X. Fwiw, мой экран -v говорит: «Версия экрана 4.00.03 (FAU) 23-окт-06»
Лаури Лехтинен
4

Попробовал вышеуказанный подход, но вторая команда не выполнилась во втором окне. Я немного скорректировал пример, используя номер окна вместо имени окна:

  1. создать сессию

    screen -S mySessionName -t 0 -A -d -m
    
  2. создать второе окно

    screen -S mySessionName -X screen -t 1
    
  3. отправить команду в первое окно

    screen -S mySessionName -p 0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
    
  4. отправить команду во второе окно

    screen -S mySessionName -p 1 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
    
  5. Теперь проверьте, была ли команда запущена в первом окне.

    screen -R mySessionName -p 0
    
  6. Теперь проверьте, была ли команда запущена во втором окне.

    screen -R mySessionName -p 1
    

Протестировано с Screen 4.00.03 (CENTOS 6.3 x64).

Бас ван Беек BVBMedia
источник
1

Вы можете установить альтернативный .screenrc через -cаргумент. В этом новом screenrc вы можете настроить несколько команд для запуска при инициализации сеанса экрана.

В конце этого альтернативного .screenrc поместите следующие команды:

screen 1 cmd1 args
screen 2 cmd2 args

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

Даррен Холл
источник