it-swarm.com.ru

Как запустить Unix экранную команду с помощью команды?

В соответствии с docs для 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

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

В чем секрет, чтобы заставить его запускать команду на заданном экране при запуске?

24
Ethan

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

Вы могли бы сделать:

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

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

21
chaos

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

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

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

$ screen -ls
1234.tailf messages

С последующим:

$screen -r 1234
15
sodamnmad

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

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

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

7
Otis

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

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


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
Jamie Flournoy

Вот как выглядит моя. Вроде нормально работает. Я думаю, что или круглые скобки могут быть причиной проблемы, или экран не откроет окно, если команда "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
4
Joe Calimari

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

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

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

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

0
Adam Monsen