Screen wysyłanie komend
Od HLDS.pl
(Przekierowano z Screen wysylanie komend)
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