Screen wysyłanie komend
Od HLDS.pl
(Różnice między wersjami)
(→Inne podejscie: skrypt co robi nam laske ;D) |
|||
(Nie pokazano 8 wersji utworzonych przez 4 użytkowników) | |||
Linia 1: | Linia 1: | ||
− | = | + | =Readreg= |
− | Wysyłanie komend z pliku do | + | Wysyłanie komend z pliku do [[screen]]a, tak jakby to pisał user. Działa przynajmniej z tego samego usera. |
− | + | Przetestowałem pracując w tym samym katalogu w [[Shell|shellu]] z którego odpalam screena do uruchomienia serwera, ale wydaje mi się ze to nie powinno mieć znaczenia. | |
− | + | Zakładamy, ze nasz screen nazywa się cs (''stworzony screen -S cs -A -d ./hlds_run ...'') | |
− | * Najpierw do pliku ''bufor'' | + | * Najpierw do pliku ''bufor'' wprowadzamy, co ma być wstukane do konsoli: |
echo "changelevel de_dust" > bufor | echo "changelevel de_dust" > bufor | ||
− | * Teraz | + | * Teraz każemy screenowi przeczytać zawartość pliku ''bufor'' i wprowadzić do swojego rejestru numer 1: |
screen -S cs -X readreg 1 bufor | screen -S cs -X readreg 1 bufor | ||
− | *Następnie wyprowadzamy z bufora do konsoli programu | + | * Następnie wyprowadzamy z bufora do konsoli programu: |
screen -S cs -X process 1 | screen -S cs -X process 1 | ||
− | [[ | + | '''Notka''' czasem trzeba zamienić ''process'' na ''paste'' (''zależy od sytemu operacyjnego''). |
+ | |||
+ | =Inne podejscie= | ||
+ | Oczywiscie najlepiej zmienic sciezke, aby jakis inny proces sie nie pierniczyl do bufora ;) | ||
+ | |||
+ | echo "ls -la " > /tmp/buff | ||
+ | screen -S cs -X readbuf /tmp/buff | ||
+ | screen -S cs -X paste . | ||
+ | |||
+ | |||
+ | =Skrypt co robi to za nas= | ||
+ | <bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | if [ $# -lt 2 ];then | ||
+ | echo "Usage $0 <screen name> <command>" | ||
+ | exit | ||
+ | fi | ||
+ | MPID=$$; | ||
+ | |||
+ | DEST=$1; | ||
+ | shift | ||
+ | |||
+ | #echo DEST $DEST | ||
+ | #echo MPID $MPID | ||
+ | |||
+ | screen -q -S $DEST -X number 2>&1 > /dev/null | ||
+ | TESTDEST=$? | ||
+ | |||
+ | if [ $TESTDEST -ne 0 ]; then | ||
+ | echo "Wrond screen name." | ||
+ | exit 1 | ||
+ | fi | ||
+ | echo "COMMAND $*" | ||
+ | |||
+ | echo $* > /tmp/$MPID.buff | ||
+ | screen -S $DEST -X readbuf /tmp/$MPID.buff | ||
+ | screen -S $DEST -X paste . | ||
+ | rm /tmp/$MPID.buff | ||
+ | </bash> | ||
+ | |||
+ | *nazwac to np screenfeed.sh i wywolywac z conajmnije dwoma parametrami, pierwszy to nazwa screena, a drugi to komenda | ||
+ | *wpisywanie prostej komendy | ||
+ | ./screenfeed.sh cs quit | ||
+ | |||
+ | *wpisywanie komendy z cudzyslowami i srednikami (trzeba dodac backslashe) | ||
+ | |||
+ | ./screenfeed.sh cs hostname \"dupa jasiu\" \; map de_dust | ||
+ | |||
+ | == Zobacz też == | ||
+ | * [[Crontab]] | ||
+ | |||
+ | [[Kategoria:Linux]] |
Aktualna wersja na dzień 23:42, 23 sty 2010
Spis treści |
Readreg
Wysyłanie komend z pliku do screena, tak jakby to pisał user. Działa przynajmniej z tego samego usera. Przetestowałem pracując w tym samym katalogu w shellu z którego odpalam screena do uruchomienia serwera, ale wydaje mi się ze to nie powinno mieć znaczenia.
Zakładamy, ze nasz screen nazywa się cs (stworzony screen -S cs -A -d ./hlds_run ...)
- Najpierw do pliku bufor wprowadzamy, co ma być wstukane do konsoli:
echo "changelevel de_dust" > bufor
- Teraz każemy screenowi przeczytać zawartość pliku bufor i wprowadzić do swojego rejestru numer 1:
screen -S cs -X readreg 1 bufor
- Następnie wyprowadzamy z bufora do konsoli programu:
screen -S cs -X process 1
Notka czasem trzeba zamienić process na paste (zależy od sytemu operacyjnego).
Inne podejscie
Oczywiscie najlepiej zmienic sciezke, aby jakis inny proces sie nie pierniczyl do bufora ;)
echo "ls -la " > /tmp/buff screen -S cs -X readbuf /tmp/buff screen -S cs -X paste .
Skrypt co robi to za nas
#!/bin/bash if [ $# -lt 2 ];then echo "Usage $0 <screen name> <command>" exit fi MPID=$$; DEST=$1; shift #echo DEST $DEST #echo MPID $MPID screen -q -S $DEST -X number 2>&1 > /dev/null TESTDEST=$? if [ $TESTDEST -ne 0 ]; then echo "Wrond screen name." exit 1 fi echo "COMMAND $*" echo $* > /tmp/$MPID.buff screen -S $DEST -X readbuf /tmp/$MPID.buff screen -S $DEST -X paste . rm /tmp/$MPID.buff
- nazwac to np screenfeed.sh i wywolywac z conajmnije dwoma parametrami, pierwszy to nazwa screena, a drugi to komenda
- wpisywanie prostej komendy
./screenfeed.sh cs quit
- wpisywanie komendy z cudzyslowami i srednikami (trzeba dodac backslashe)
./screenfeed.sh cs hostname \"dupa jasiu\" \; map de_dust