tr a A </ etc / hosts | ソート-r | pr -d> / etc / hosts


9

この行では:

tr a A < /etc/hosts | sort -r |pr -d > /etc/hosts 

期待される結果は何でしょうか?小文字の 'a'が大文字の 'A'に変わることは知っていますが、次は何ですか?リダイレクトが同じファイル名であるため、元のファイルは上書きされますか?


bash: /etc/hosts: Permission deniedこれをとして実行している場合を除いて、エラーが発生するはずです(シェルがbashであると想定)root/etc/hosts通常、rootのみが書き込み可能です。これを実行してrootいる場合(実際には実行しないでください)、/etc/hostsMichael Homerが説明したように空になります。
arielf

回答:


17

期待される結果は空の/etc/hostsファイルです。

プログラムが実行を開始してファイルからの読み取りを開始する前に、リダイレクト> /etc/hostsが発生し、ファイル切り捨てられます。tr

出力をに書き込むに/etc/hostsは、ファイルのコピーを操作する(または出力ファイルを後で所定の場所に移動する)かsponge、moreutilsコマンドを使用します。これにより、標準入力を吸収してファイルに書き込みます。

tr a A < /etc/hosts | sort -r | pr -d | sponge /etc/hosts

その場合には、それぞれが「」に/etc/hostsなります置き換える「A」で、すべての行がされるロケールに応じて逆にソート空白行が各ラインの間に挿入され、その結果が投入されます/etc/hosts


また、便利な場合もあります。


1
それが書かれた方法と私が期待すべき結果と期待される結果を得るためにどのように書かれることができるかで私が何を期待すべきかを明確にするために本当にありがとう。
tdharrison

moreutilsは非常に優れたツールスイートです
Robert Riedl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.