Как запустить экранную команду Unix с помощью команды?
В соответствии с docs для команды "Экран" Unix, вы можете настроить его в .screenrc, чтобы начать с кучи экранов по умолчанию, каждый из которых выполняет указанную команду.
Здесь мой cofig:
# 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
Тот же результат тоже.
В чем секрет, чтобы заставить его запускать команду на заданном экране при запуске?
Ответы
Ответ 1
Ваша программа запускается (ну, кроме cd), она просто запускается без родительской оболочки, поэтому, как только она завершается, она завершается, и все готово.
Вы можете сделать:
screen -t "autotest" 2 bash -c 'cd ~/project/contactdb ; autotest'
Создает две оболочки, но жизнь, вероятно, продолжится.
Ответ 2
Попробуйте следующее:
$ screen -S 'tailf messages' -d -m tailf /var/log/messages
Затем вы можете сделать следующее:
$ screen -ls
1234.tailf messages
Далее следуют:
$screen -r 1234
Ответ 3
Это может помочь, но может быть не совсем то, что вы хотите.
Поместите "зомби az" или "defzombie az" в качестве первой строки вашего .screenrc. "az" может быть любым 2 клавишами, которые вы хотели бы. Теперь, когда экран должен закрыться (например, команда завершена, например), она фактически не закрывается; нажатие "a" закроет его, нажатие "z" повторит выполнение команды, прикрепленной к этому экрану.
Я обнаружил, что в экранное руководство пользователя.
Ответ 4
Вы также можете "набить" символы на экран, как если бы вы их набрали.
Здесь вы можете сделать это с помощью вашего примера:
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"
Ответ 5
Вот как выглядит мой. Кажется, он работает нормально. Я думаю, что либо скобка может вызвать проблему, либо экран не откроет окно, если команда "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
Ответ 6
Вот как я это сделаю.
screen -t shell_0
chdir ~/project/contactdb
screen -t autotest autotest
Вышеупомянутое, по-видимому, оценивается процедурно по экрану. Сначала мы устанавливаем новый экран с названием shell_0
. Поскольку мы не указали других параметров, текущий рабочий каталог будет иметь каталог родительской оболочки или домашний каталог пользователя. Затем мы устанавливаем каталог по умолчанию для новых экранов на ~/project/contactdb
. Затем мы создаем новый экран с командой autotest
.
Номер окна (n
) является необязательным, я обычно опускаю его.