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?
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.
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
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 .
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"
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
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.