it-swarm.com.de

Wie startet man einen Unix-Bildschirmbefehl mit einem Befehl?

Gemäß den Dokumenten für den Unix "screen" -Befehl können Sie ihn in .screenrc so konfigurieren, dass er mit einer Reihe von Standardbildschirmen beginnt, von denen jeder einen von Ihnen angegebenen Befehl ausführt.

Hier ist meine Cofig:

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

Der Autotest-Befehl wird nicht ausgeführt. Das Fenster, in dem ich autotest ausführen möchte, wird sofort geschlossen, wenn ich screen starte.

Ich habe es auch versucht mit nur ...

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

Gleiches Ergebnis.

Ich habe auch versucht ...

screen -t "autotest" 2 ls

Gleiches Ergebnis auch dort.

Was ist das Geheimnis, um einen Befehl in einem bestimmten Bildschirm beim Start ausführen zu lassen?

24
Ethan

Ihr Programm wird gerade ausgeführt (abgesehen von der CD), es wird lediglich ohne eine übergeordnete Shell ausgeführt. Sobald es abgeschlossen ist, wird es beendet und Sie sind fertig.

Du könntest es tun:

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

Bringt zwei Muscheln hervor, aber das Leben wird wahrscheinlich weitergehen.

21
chaos

Versuche dies:

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

Dann können Sie später tun:

$ screen -ls
1234.tailf messages

Gefolgt von:

$screen -r 1234
15
sodamnmad

Dies kann helfen, ist aber möglicherweise nicht ganz das, was Sie möchten.

Setzen Sie "Zombie Az" oder "Defzombie Az" als erste Zeile Ihrer .screenrc. "az" kann zwei beliebige Tasten sein. Wenn nun ein Bildschirm geschlossen werden soll (beispielsweise der Befehl wurde beendet), wird er nicht wirklich geschlossen. Wenn Sie 'a' drücken, wird der Befehl geschlossen, mit 'z' wird der an diesen Bildschirm angefügte Befehl erneut ausgeführt.

Ich fand das bei dem Benutzerhandbuch des Bildschirms .

7
Otis

Sie können Zeichen auch in den Bildschirm "stopfen", als hätten Sie sie eingegeben.

So können Sie das an Ihrem Beispiel machen:


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

So sieht meins aus. Es scheint gut zu funktionieren. Ich denke, entweder die Klammer verursacht das Problem oder der Bildschirm öffnet kein Fenster, wenn der Befehl "Autotest" nicht vorhanden ist.

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

So mache ich es.

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

Das Obige scheint prozedural durch den Bildschirm ausgewertet zu werden. Zuerst legen wir einen neuen Bildschirm mit dem Titel Shell_0 fest. Da wir keine anderen Optionen angegeben haben, wird das aktuelle Arbeitsverzeichnis das der übergeordneten Shell oder des Heimatverzeichnisses des Benutzers sein. Dann setzen wir das Standardverzeichnis für neue Bildschirme auf ~/project/contactdb. Als Nächstes erstellen wir einen neuen Bildschirm, in dem der Befehl autotest ausgeführt wird.

Die Fensternummer (n) ist optional, ich lasse sie normalerweise weg.

0
Adam Monsen