Stern inaktivStern inaktivStern inaktivStern inaktivStern inaktiv
 

Als ich versuchte ein bash Script welches sich selbst aktualisiert sobald eine neuere Version verfügbar ist und sich selbst noch einmal mit der neuen Version aufruft mit den initialen Scripaufrufparametern bekam ich Probleme. Beim erneuten Aufruf wurden die Parameter nicht mehr genau so übergeben wie sie initial eingegeben wurden. Besonders Leerzeichen in Stringparametern bereiteten Probleme. Der Scripupdate soll ja für den Aufrufen unbemerkt stattfinden und der Aufrufer immer die aktuellste Version benutzen.

 

 

 

String Parameter mit Leerzeichen bereiten besonders Probleme. Der naheliegende Ansatz ist den Parameter $@ beim erneuten Aufruf mitzugeben aber es funktioniert so nicht. Wenn man allerdings die Aufrufparameter in einem Array ablegt und dann den gesamten Arrayinhalt beim Aufruf mitgibt funktioniert die Parameterweitergabe perfekt.

parameters=()
for (( i=1; i<=$#; i++ )); do
    parameters+=("${!i}")
done

Der Scriptaufruf muss dann wie folgt aussehen:

exec "$(which bash)" --noprofile "$0" "${parameters[@]}"   

Beispielcode  kann hier runtergeladen werden.

 

Kommentar schreiben

*** Hinweis ***

Kommentare sind erwünscht. Aber um lästige Spamposts automatisch abzuweisen gibt es ein paar Dinge die zu beachten sind:
  1. Kommentare werden manuell überprüft und deshalb dauert es in der Regel einen Tag bis sie veröffentlicht werden.
  2. Kommentare mit dem Text http werden zurückgewiesen mit der Meldung Sie sind nicht berechtigt den Tag zu verwenden.
  3. Es muss mindestens eine Stunde zwischen weiteren Kommentaren gewartet werden.