Screen and quoting

24/04/2011 - 22:35 von Marc Schoechlin | Report spam
Hallo,

ich möchte in GNU Screen ein Kommando starten das seine Eingabe aus
einer Datei bezieht.

Das sieht so aus:

screen -t fooo-blade0306 -S MYSCREEN -d -m \
ssh -t -o StrictHostKeyChecking=no fooo-blade0306 'bash -s' < ~/hostctl/recipe//health
screen -x MYSCREEN -m -X screen -t fooo-blade0406 \
ssh -t -o StrictHostKeyChecking=no fooo-blade0406 'bash -s' < ~/hostctl/recipe//health

Die Datei /export/home/common-scripts/hostctl/recipe//health enthàlt
z.B. mehrere Shell Befehle.

Leider klappts nicht - im Screen wir immer nur eine "bash -s" Session
gestartet. Ich habe bisher keine Möglichkeit gefunden Screen über
entsprechendes Quoting beizubringen die Pipe mit in das Screen Command
einzubeziehen.

Hat jemand einen Tipp?

Gruß
Marc
 

Lesen sie die antworten

#1 Thomas PointedEars Lahn
25/04/2011 - 01:53 | Warnen spam
Marc Schoechlin wrote:

ich möchte in GNU Screen ein Kommando starten das seine Eingabe aus
einer Datei bezieht.

Das sieht so aus:

screen -t fooo-blade0306 -S MYSCREEN -d -m \
ssh -t -o StrictHostKeyChecking=no fooo-blade0306 'bash -s' <
~/hostctl/recipe//health
screen -x MYSCREEN -m -X screen -t fooo-blade0406 \
ssh -t -o StrictHostKeyChecking=no fooo-blade0406 'bash -s' <
~/hostctl/recipe//health

Die Datei /export/home/common-scripts/hostctl/recipe//health enthàlt
z.B. mehrere Shell Befehle.

Leider klappts nicht - im Screen wir immer nur eine "bash -s" Session
gestartet. Ich habe bisher keine Möglichkeit gefunden Screen über
entsprechendes Quoting beizubringen die Pipe mit in das Screen Command
einzubeziehen.

Hat jemand einen Tipp?



Erstens ist da keine Pipe. Zweitens ist screen(1) in der Tat eigenwillig,
da es eben den Befehl nicht in einer Shell ausführt (welche die Umleitung
machen könnte), sondern exakt den Befehl ausführt und diesen aus den
verbleibenden Argumenten zusammensetzt. Eine Lösung ist daher, screen dazu
zu zwingen, den Befehl in einer Shell auszuführen, indem der Befehl für
screen die Shell selbst ist:

screen -t fooo-blade0306 -S MYSCREEN -d -m \
sh -c "ssh -t -o StrictHostKeyChecking=no fooo-blade0306 \
'bash -s' < ~/hostctl/recipe/health"
screen -x MYSCREEN -m -X screen -t fooo-blade0406 \
sh -c "ssh -t -o StrictHostKeyChecking=no fooo-blade0406 \
'bash -s' < ~/hostctl/recipe/health"

Ungetestet (hier nur getestet mit `screen sh -c "echo foo > /tmp/foo"' und
geguckt, dass in /tmp/foo das Richtige steht; das war der Fall).

Die andere Lösung ist, den Umleitungskram in ein externes Script
auszulagern; dann geht

screen … externes_script

Ausserdem kommt es darauf an – das hast Du nicht geschrieben – ob die
betreffende Datei lokal oder remote vorliegt (hier: lokal). Bei Remote-
Zugriff musst Du die Umleitung noch in die Apostrophe hineinziehen, damit
die von ssh(1) gestartete Shell das Handle öffnet.


HTH
PointedEars

Ähnliche fragen