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:
Die eMail ist versteckt und nicht öffentlich sichtbar. Sie wird benutzt um über neue Kommentare zu informieren.