# bash frage



## bygones (5. Aug 2009)

Hi,

ich habe ein kleines Bash programmierungsproblem.

ich will in einem Skript mich nicht-interaktiv auf einen anderen rechner verbinden, dort ein anderes skript starten und bei erfolg diesem das eigentliche Skript fortsetzen.

folgendes habe ich bisher:

```
ssh -n foo.bar dauertLaenger.sh &
if [ $? == 0 ];
then
   echo "funzt"
fi
```

das problem scheint zu sein dass er das andere Skript zwar startet aber sofort [c]funzt[/c] ausgibt... 

gibt es eine art waitFor ?

Thx


----------



## schalentier (5. Aug 2009)

Lass doch das "&" am Ende der ersten Zeile weg... das besagt ja eigentlich, fuehre den Befehl im Hintergrund aus...


----------



## faetzminator (5. Aug 2009)

Mit dem [c]&[/c] am Ende des ssh Commands lässt du diese Verarbeitung im Hintergrund (als eigenen Prozess!?) starten. Willst du [c]dauertLaenger.sh[/c] auf dem fremden Rechner mit [c]&[/c] starten?


----------



## bygones (5. Aug 2009)

jo dachte das muesste sein ;-)

stimmt mit dem & weglassen...

ansonsten habe ich auch [c]wait[/c] gefunden ...

aber & weglassen klingt sinnvoll... keine ahnung warum das dabei wart

danke euch


----------



## bygones (10. Aug 2009)

muss die Frage nochmal hochholen.

ich will per ssh ein Skript auf einem anderen Rechner starten

die .sh auf dem startrechner


```
LAST_LINE=`tail -n 1 /path/to/a/simple/file`

if [[ $LAST_LINE == *true* ]]
then
    ssh -i ~/.ssh/my.id_dsa derAndereRechner ~/langeDauerendesSkript.sh
    if [ $? == 0 ];
    then
        echo "ALLES OK"
    fi
```
meine problem sind nun 

a) mit dem SSH befehl funktioniert LAST_LINE nicht mehr - ich bekomme die meldung [c]A file or directory in the path name does not exist[/c]... ohne SSH funktioniert das

b) er wartet nicht auf das beenden des anderen skripts - ich erhalte sofort die Meldung [c]ALLES OK[/c]

c) wenn das [c]langeDauerendeSkript.sh[/c] einen Fehler wirft, so wird trotzdem [c]ALLES OK[/c] ausgegeben.

es scheint so dass das andere Skript gar nicht aufgerufen wird.... da ein [c]touch foo[/c] nix bewirkt

*Generelle Frage* -> Kann man eigentlich ueber einen SSH befehl so ein Skript starten ?

Kann mir wer bei den Problemen helfen ?

Danke


----------



## faetzminator (10. Aug 2009)

a) Hast du tail schon in der bash/shell von Hand abgesetzt und er funktioniert? Wie sieht der Output aus?
b) Hab zwar in der manpage nichts gefunden, sollte er aber
c) Es könnte sein, dass der Status von ssh und nicht des aufzurufenden Scripts zurückgegeben wird, da musst du wohl oder übel nach Beendigung des Scripts deren Status per echo oä ausgeben und im Script einlesen oä

Deine Parameter sehen alle Ok aus:

```
[B]ssh [/B][-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
         [-D [bind_address:]port] [-e escape_char] [-F configfile]
         [B][-i identity_file][/B] [-L [bind_address:]port:host:hostport]
         [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
         [-R [bind_address:]port:host:hostport] [-S ctl_path]
         [-w local_tun[:remote_tun]] [user@][B]hostname [command][/B]
```


```
[code]If command is specified, it is executed on the remote host instead of a login shell.
```


----------



## bygones (10. Aug 2009)

hat sich nun grad erledigt - den Sysadmin zu fragen hilft hier...

das ssh ist nur fuer ein definiertes Skript erlaubt - alle anderen Befehle werden sozusagen ignoriert.
Auf dem Zielrechner war aber genau dieses Skript (langeDauerendesSkript.sh) falsch eingetragen, weswegen die - ein bisschen unglueckliche - Fehlermeldung kam...


klappt jetzt jedenfalls


----------

