から名前のファイルを作成し、私は必要に応じてsudo
を使用する方法でファイルに物事を追加したいが、ここで私がこれまで持っているものです。バッシュ:関数のパラメータ
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
しかしライン1は動作しません。出力は次のようになります~/.wot: No such file or directory
もちろんファイルは存在せず、次の行は正しく動作しません。
どうすれば修正できますか?ありがとうございました !もちろん、他のコメントやアプローチも歓迎します!
が悪い形である - いずれかが実装エコー文字列の[POSIX spec](http://pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html)に従ってください。( '-n'は必須ではありませんが、許可されていますが、 '-e'を扱う方法は、2つの文字' -e'をstdoutに書き出すことです)。代わりに 'printf'を使うことを考えてください。 (そうです、bashの 'echo'はデフォルトでは非準拠ですが、' posix'と 'xpg_echo'フラグが両方とも標準の動作として設定されている場合は*常に*非準拠ではありません)。 –
ところで、 'curl -sSL" $ 1 "|もしあなたが '$ 2'で指定されたファイルに書き込む権限をエスカレートする必要があれば、' sudo tee - "$ 2">/dev/null'を実行する必要があります。余分な特権が必要な場合は、その出力ファイルを開くことです。 –
また、たくさんの場所で引用符を紛失したり誤解したりしています。そのうちのいくつかは積極的に危険です。 'sudo bash -c" curl -sSL $ 1 >> $ 2 "' $ 1'に '$(rm -rf $ HOME) 'が含まれていれば、非常に悪いことになるでしょう。あなたがcurlの特権をエスカレートしようとしていたなら、 'sudo bash -c 'curl -sSL" $ 1 ">>" $ 2 "' _" $ @ "'でなければなりません。そのようなシェルエスケープを避けるために、引数をout-of-bandで指定する定数(一重引用符で囲まれた)文字列としての「sudo」特権。 –