以前はいつも特権ファイルを変更するためにsed
とtee
を組み合わせて使用しました。これは素晴らしい仕事を、時特権付きシンボリックリンクでSedを使用
sed -r 'script' "/etc/hosts" | sudo tee "/etc/hosts" 1>/dev/null
:シェル自体がroot権限を持っていないので、私は、ファイルにコマンド出力を書き込むために創造的な取得しなければなりませんでした。ホストファイルを広告ブロックに使用し始めてから、パイプがバッファに限定されていることが分かりました。その後、ファイルが喜んで上書きされ、残りのファイルは消えてしまいます。問題のファイルがシンボリックリンクであることから、
sed -r 'script' "/etc/hosts" > "/etc/hosts.tmp" && sudo mv "/etc/hosts.tmp" "/etc/hosts"
残念ながら、これはあまりにも動作しません。
は私もはるかに簡単なバージョンを検討しました。 mv
は、下のファイルとは対照的に、シンボリックリンクを上書きします。
私の現在のソリューションはこれです:
sed -r 'script' "/etc/hosts" | sudo tee "/etc/hosts.tmp" 1>/dev/null &&
sudo cat "/etc/hosts.tmp" | sudo tee "/etc/hosts" 1>/dev/null &&
sudo rm "/etc/hosts.tmp"
うわ!どのように冗長です!
これを行うクリーナーの方法はありますか?
'cat'の無用な使用:' sudo tee/etc/hosts etc/hosts.tmp'を使用してください。 – chepner
役に立たないと言う無駄な迷惑メール。 'sudo tee 'で作成された'/etc/hosts.tmp'がシェルによって読み込み可能であるという保証はないので、これはうまくいかないでしょう。 –
ファイルを作成しています。ファイルを作成するために 'sudo'を使う必要はありません(最初に'/etc'に一時ファイルを作成する必要はありません)。 – chepner