Screen wysyłanie komend

Od HLDS.pl
(Różnice między wersjami)
Skocz do: nawigacji, wyszukiwania
m (Opis)
(Inne podejscie: skrypt co robi nam laske ;D)
 
(Nie pokazano 5 wersji utworzonych przez 3 użytkowników)
Linia 1: Linia 1:
=Opis=
+
=Readreg=
Wysyłanie komend z pliku do screena , tak jakby to pisał user. Działa przynajmniej z tego samego usera.
+
Wysyłanie komend z pliku do [[screen]]a, tak jakby to pisał user. Działa przynajmniej z tego samego usera.
Przetestowalem pracujac w tym samym katalogu w shellu z korego odlaam screena do uruchomienia serwera, ale wydaje mi sie ze to nie powinno miec znaczenia.
+
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.
  
Zakladamy, ze nasz screen nazywa sie cs (stworzony screen -S cs -A -d ./hlds_run ....)
+
Zakładamy, ze nasz screen nazywa się cs (''stworzony screen -S cs -A -d ./hlds_run ...'')
  
* Najpierw do pliku ''bufor'' wprowadamy co ma byc wstukane do konsoli
+
* Najpierw do pliku ''bufor'' wprowadzamy, co ma być wstukane do konsoli:
 
  echo "changelevel de_dust" > bufor
 
  echo "changelevel de_dust" > bufor
  
* Teraz kazemy screenowy przeczytac zawartosc pliku ''bufor'' i wrpowadzic do swojego rejestru nr 1
+
* 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'').
  
'''Notka''' czasem trzeba zamienic ''process'' na ''paste'' (zalezy od sytemu operacyjnego).
+
=Inne podejscie=
[[kategoria:Linux]]
+
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

Zobacz też

Osobiste
Przestrzenie nazw
Warianty
Działania
HLDS.pl - Menu:
Inne
IRC
Inne sekcje:
Znajomi:
Narzędzia