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

Spam Kommentare sind sinnlos !
Vor der Publizierung wird jeder Beitrag auf Spam geprüft. Leider dauert es deswegen bis ein Kommentar sichtbar wird. Dafür erhält aber kein Subscriber Spam eMails.
Die eMail ist optional und nicht öffentlich sichtbar. Sie ist notwendig um eMail Benachrichtigungen zu Antworten auf Kommentare zu erhalten und wird u.U. genutzt um offline zu kommunizieren.

Spam comments are useless !
Any comment will be reviewed first and checked for spam. Unfortunately this delays the publishing of comments but will protect subscribers from spam.
eMail is optional and hidden and is required get update notifications for any comments and may be used to contact you offline