Как запустить Unix экранную команду с помощью команды? - PullRequest
24 голосов
/ 13 февраля 2009

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

Вот мой кофиг:

# Default screens
screen -t "shell_0"  1
screen -t "autotest" 2 cd ~/project/contactdb ; autotest

Он не будет запускать команду автотеста. Это окно, в котором я пытаюсь запустить autotest, сразу же закрывается, когда я запускаю screen.

Я тоже попробовал это просто ...

screen -t "autotest" 2 cd ~/project/contactdb

Тот же результат.

Я тоже пытался ...

screen -t "autotest" 2 ls

Там тоже результат тот же.

В чём секрет запуска команды на заданном экране при запуске?

Ответы [ 6 ]

21 голосов
/ 13 февраля 2009

Ваша программа запущена (ну, кроме компакт-диска), просто она запускается без родительской оболочки, поэтому, как только она завершится, она завершится, и вы закончите.

Вы можете сделать:

screen -t "autotest" 2 bash -c 'cd ~/project/contactdb ; autotest'

Создает две оболочки, но жизнь, вероятно, продолжится.

16 голосов
/ 23 ноября 2009

Попробуйте это:

$ screen -S 'tailf messages' -d -m tailf /var/log/messages

Тогда позже вы можете сделать:

$ screen -ls
1234.tailf messages

Далее:

$screen -r 1234
7 голосов
/ 13 февраля 2009

Это может помочь, но не совсем то, что вы хотите.

Поставьте "zombie az" или "defzombie az" в качестве первой строки вашего .screenrc. «az» может быть любыми двумя клавишами. Теперь, когда экран должен закрыться (например, команда завершила выполнение), он фактически не закроется; нажатие «a» закроет его, нажатие «z» повторно выполнит команду, прикрепленную к этому экрану.

Я обнаружил, что на руководство пользователя экрана .

5 голосов
/ 16 июня 2009

Вы также можете «набивать» символы на экране, как если бы вы их набрали.

Вот как вы можете это сделать на своем примере:


screen -t "shell_0"  1

# create the following screen in the desired dir, instead of cd-ing afterwards :)
chdir ~/project/contactdb
screen -t "autotest" 2

# (without this sometimes screens fail to start correctly for me)
sleep 5

# paste some text into screen number 2:
select 2
stuff "autotest\012"
4 голосов
/ 13 февраля 2009

Вот как выглядит моя. Вроде нормально работает. Я думаю, что или круглые скобки могут быть причиной проблемы, или экран не откроет окно, если команда "autotest" не существует.

screen -t zsh 1
screen -t emacs 2 emacs -nw
screen -t mutt 3 mutt
monitor on
screen -t mc 4 mc -s
screen -t elinks 4 elinks
0 голосов
/ 20 декабря 2012

Вот как бы я это сделал.

screen -t shell_0
chdir ~/project/contactdb
screen -t autotest autotest

Вышеуказанное, по-видимому, процедурно оценивается на экране. Сначала мы устанавливаем новый экран с заголовком shell_0. Поскольку мы не указали никаких других параметров, текущим рабочим каталогом будет каталог родительской оболочки или домашнего каталога пользователя. Затем мы устанавливаем каталог по умолчанию для новых экранов на ~/project/contactdb. Затем мы устанавливаем новый экран с командой autotest.

Номер окна (n) является необязательным, я обычно его опускаю.

...