2009-02-12 20 views
23

De acuerdo con docs for the Unix "screen" command, puede configurarlo en .screenrc para comenzar con una serie de pantallas predeterminadas, cada una ejecutando un comando que usted especifique.¿Cómo se inicia el comando de pantalla de Unix con un comando?

Aquí es mi COFIG:

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

No se ejecutará el comando de autotest. La ventana donde trato de ejecutar autotest simplemente se cierra instantáneamente cuando comienzo screen.

También he probado con sólo ...

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

mismo resultado.

También probé ...

screen -t "autotest" 2 ls 

mismo resultado allí también.

¿Cuál es el secreto para que ejecute un comando en una pantalla determinada al inicio?

Respuesta

21

Su programa se está ejecutando (bueno, excepto el cd), es solo que se está ejecutando sin un shell principal, por lo que tan pronto como se complete, se cierra y listo.

que podría hacer:

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

genera dos conchas, pero la vida probablemente continuará.

6

Esto puede ayudar, pero puede no ser del todo lo que desea.

Ponga "zombie az" o "defzombie az" como la primera línea de su .screenrc. "az" puede ser las 2 teclas que quieras. Ahora, cuando una pantalla debería cerrarse (comando terminado de ejecutar, por ejemplo), no se cerrará; presionar 'a' lo cerrará, presionando 'z' volverá a ejecutar el comando adjunto a esa pantalla.

Encontré eso en the screen user's manual.

4

Así es como se ve el mío. Parece que funciona bien. Creo que el paréntesis podría estar causando el problema o que la pantalla no abrirá una ventana si el comando "autotest" no existe.

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

Puede también caracteres "cosas" en la pantalla como si se hubiera tecleado ellos.

Así es como se puede hacer eso con su ejemplo:


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

Prueba esto:

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

Luego, más tarde que puede hacer:

$ screen -ls 
1234.tailf messages 

Seguido por:

$screen -r 1234 
0

Así es como lo haría.

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

Lo anterior parece ser evaluado procesalmente por pantalla. Primero establecemos una nueva pantalla con el título shell_0. Como no proporcionamos otras opciones, el directorio de trabajo actual será el del shell principal o el directorio de inicio del usuario. Luego configuramos el directorio predeterminado para las nuevas pantallas al ~/project/contactdb. A continuación, establecemos una nueva pantalla ejecutando el comando autotest. El número de ventana (n) es opcional, generalmente lo omito.

Cuestiones relacionadas