On Friday 28 January 2005 09:36, Dr. Jürgen Vollmer wrote:
Am Montag, 24. Januar 2005 20:32 schrieb christian zimmermann:
ich habe da ein Problem mit einem Shell Script, und zwar folgendes. Ich möchte via ssh checken ob ein bestimmter rechner ein bestimmtes verzeichniss hält, hält er diese soll der hostname als variable gespeichert werden.
RSYS=`ssh root@db1.domain.com if [ -d /ha/db2/db2inst1/ ] then RSYS=$DB1 else RSYS=$DB2 fi`
das kann doch so gar nicht gehen. man kann ssh nur ein Programmnamen angeben, welches dann ausgeführt werden soll: If command is specified, command is executed on the remote host instead of a login shell.
if [...] ist aber kein Programm, sondern wird von der shell interpretiert. Also die ganze if-Anweisung in ein kleines Script packen und das dann aufrufen. Dessen Ausgabe steht dann wieder in der Shell-variablen.
BTW:
if [ -d /ha/db2/db2inst1/ ] then RSYS=$DB1 else RSYS=$DB2 fi
vor dem "then", "else" und "fi" fehlt ein ; (Semikolon) Das muß da stehen, wenn alles auf einer Zeile steht.
1. Es gehen auch Shell Befehle. Man muss sie halt richtig quoten:
ssh localhost 'if [ -d / ]; then echo "/ is dir"; fi' / is dir
2. Lösung:
RSYS=$(ssh localhost 'if [ -d /etc ]; then echo "localhost"; fi') r2@opi:~> echo $RSYS localhost
Du kannst auch ausnutzen, dass ssh den Return-Code des Kommandos zurückgibt: if ssh localhost '[ -d /etc ]'; then echo localhost; fi Torsten