ich die Dinge in eine Datei in einer Weise angehängt werden soll, die sudo
bei Bedarf verwendet, hier ist, was ich habe, so weit:Bash: create-Datei mit dem Namen von Funktionsparameter
getAndAppend(){
# create file if doesn't exist, with right permission
[[ ! -s $2 ]] && touch "$2" || [[ ! -s $2 ]] && sudo touch "$2" # line 1
# append stuff to it
[[ -w $2 ]] && curl -sSL $1 >> $2 || sudo bash -c "curl -sSL $1 >> $2"
[[ -w $2 ]] && echo -e "\n" >> $2 || sudo bash -c "echo -e \"\n\""
}
file="~/.wot"
url="https://raw.github.com/n-marshall/system-setup/master/common/configs/.gitignore_global"
getAndAppend $url $file
jedoch Linie 1 nicht funktioniert dass die Ausgabe etwa so aussieht wie ~/.wot: No such file or directory
Dann wird die Datei natürlich nicht existieren und die folgenden Zeilen können nicht richtig funktionieren.
Wie könnte ich das beheben? Vielen Dank ! Jeder andere Kommentar oder Vorgehensweise ist natürlich willkommen!
BTW, 'Echo -e' ist schlechte Form - jede implementiert Echo Folgende [die POSIX-Spezifikation] (http://pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html) zu dem Buchstaben wird es nicht unterstützen ('-n' ist nicht erforderlich, aber erlaubt, aber das einzige konforme Der Umgang mit '-e' besteht darin, die zwei Buchstaben' -e' in stdout zu schreiben. Verwenden Sie stattdessen "printf". (Ja, bash's 'echo' ist standardmäßig nicht konform, aber es ist nicht * immer * nicht konform - wenn sowohl' posix' als auch 'xpg_echo' Flags gesetzt sind, verhält es sich wie das Standardmandat). –
BTW, betrachte 'curl -sSL" $ 1 "| sudo tee - "$ 2">/dev/null' wenn Sie Privilegien für das Schreiben in die Datei namens '$ 2' eskalieren müssen - es ist nicht nötig' curl' zu starten (was schließlich Netzwerk IO und hat eine relativ große Angriffsfläche) als root, wenn Sie nur die zusätzlichen Rechte für das Öffnen der Ausgabedatei benötigen. –
Auch Sie vermissen oder missbrauchen Zitate in einer ganzen Reihe von Orten, und einige davon sind aktiv gefährlich. 'sudo bash -c" curl -sSL $ 1 >> $ 2 "' wird sehr schlimme Dinge tun, wenn '$ 1' '' $ (rm -rf $ HOME) ''enthält. Wenn Sie Privilegien für curl eskalieren würden, müsste das "sudo bash -c" curl -sSL "$ 1" >> "$ 2" '_ "$ @" 'sein - welches das Skript mit' ausführt sudo'-Privilegien als konstante (single-quoted) Zeichenkette mit ihren Out-of-Band-Argumenten - um solche Shell-Escapes zu vermeiden. –