2009-02-12 13 views
23

In base allo docs for the Unix "screen" command, è possibile configurarlo in .screenrc per iniziare con una serie di schermate predefinite, ognuna con un comando specificato dall'utente.Come si avvia il comando dello schermo Unix con un comando?

Ecco la mia cofig:

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

Non verrà eseguito il comando di autotest. La finestra in cui sto cercando di eseguire autotest si chiude immediatamente quando avvio screen.

ho anche provato con appena ...

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

stesso risultato.

Ho provato anche ...

screen -t "autotest" 2 ls 

Stesso risultato anche lì.

Qual è il segreto per farlo eseguire un comando in una determinata schermata all'avvio?

risposta

21

Il programma è in esecuzione (beh, tranne il cd), è solo che viene eseguito senza una shell genitore, quindi non appena viene completato, si chiude e il gioco è fatto.

si potrebbe fare:

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

genera due gusci, ma la vita probabilmente andare avanti.

6

Questo potrebbe aiutare ma potrebbe non essere interamente ciò che desideri.

Inserisci "zombie az" o "defzombie az" come prima riga del tuo .screenrc. "az" può essere qualsiasi 2 tasti desideri. Ora, quando uno schermo dovrebbe chiudersi (ad esempio, il comando terminato, non verrà chiuso); premendo 'a' si chiuderà, premendo 'z' si eseguirà nuovamente il comando allegato a quello schermo.

Ho trovato che a the screen user's manual.

4

Ecco come appare il mio. Sembra che funzioni bene. Penso che la parentesi potrebbe causare il problema o lo schermo non aprirà una finestra se il comando "autotest" non esiste.

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 
5

È possibile anche personaggi "roba" nello schermo come se si fosse loro digitato.

Ecco come si può fare con il tuo esempio:


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" 
15

Prova questo:

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

Poi, più tardi si può fare:

$ screen -ls 
1234.tailf messages 

Seguito da:

$screen -r 1234 
0

Ecco come lo farei.

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

Quanto sopra sembra essere valutato proceduralmente da schermo. Per prima cosa stabiliamo una nuova schermata con il titolo shell_0. Poiché non abbiamo fornito altre opzioni, la directory di lavoro corrente sarà quella della shell madre o della home directory dell'utente. Quindi impostiamo la directory predefinita per le nuove schermate su ~/project/contactdb. Successivamente, stabiliamo una nuova schermata con il comando autotest.

Il numero di finestra (n) è facoltativo, in genere lo ometto.