2009-02-12 11 views
23

Zgodnie z docs for the Unix "screen" command, możesz skonfigurować go w .screenrc, aby rozpocząć od garści domyślnych ekranów, z których każdy uruchamia określone przez ciebie polecenie.Jak uruchomić polecenie ekranowe systemu Unix za pomocą polecenia?

Oto mój cofig:

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

Nie będzie uruchomić komendę autotestu. To okno, w którym próbuję uruchomić autotest, zamyka się natychmiast po uruchomieniu screen.

Próbowałem też ją po prostu ...

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

sam rezultat.

Próbowałem również ...

screen -t "autotest" 2 ls 

sam rezultat tam.

Jaki jest sekret, aby uruchomić go, aby uruchomić polecenie na danym ekranie podczas uruchamiania?

Odpowiedz

21

Program jest uruchamiany (cóż, z wyjątkiem dysku CD), po prostu jest uruchamiany bez powłoki nadrzędnej, więc zaraz po jej zakończeniu wychodzi i gotowe.

Można zrobić:

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

Spawns dwie muszle, ale życie będzie prawdopodobnie dalej.

6

To może pomóc, ale może nie być całkowicie tym, czego potrzebujesz.

Umieść "zombie az" lub "defzombie az" jako pierwszą linię twojego .screenrc. "az" może zawierać dowolne 2 klucze. Teraz, gdy ekran powinien się zamknąć (na przykład polecenie zakończone wykonywaniem), nie zamknie się; naciśnięcie "a" spowoduje jej zamknięcie, naciśnięcie "z" spowoduje ponowne wykonanie polecenia dołączonego do tego ekranu.

Znalazłem to pod the screen user's manual.

4

Oto, jak wygląda mój. Wygląda na to, że działa dobrze. Myślę, że albo nawias może być przyczyną problemu, albo ekran nie otworzy okna, jeśli polecenie "autotest" nie istnieje.

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

Można też „rzeczy” znaków na ekran, jakby były wpisywane.

Oto jak można to zrobić ze swoim przykładzie:


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

Spróbuj tego:

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

Później można zrobić:

$ screen -ls 
1234.tailf messages 

Obserwowani przez:

$screen -r 1234 
0

Oto, jak to zrobię.

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

Powyższe wydaje się być ocenione proceduralnie przez ekran. Najpierw tworzymy nowy ekran o tytule shell_0. Ponieważ nie daliśmy żadnych innych opcji, bieżącym katalogiem roboczym będzie katalog macierzysty lub katalog domowy użytkownika. Następnie ustawiamy domyślny katalog dla nowych ekranów na ~/project/contactdb. Następnie tworzymy nowy ekran z komendą autotest.

Numer okna (n) jest opcjonalny, generalnie go pomijam.

Powiązane problemy