この行では:
tr a A < /etc/hosts | sort -r |pr -d > /etc/hosts
期待される結果は何でしょうか?小文字の 'a'が大文字の 'A'に変わることは知っていますが、次は何ですか?リダイレクトが同じファイル名であるため、元のファイルは上書きされますか?
この行では:
tr a A < /etc/hosts | sort -r |pr -d > /etc/hosts
期待される結果は何でしょうか?小文字の 'a'が大文字の 'A'に変わることは知っていますが、次は何ですか?リダイレクトが同じファイル名であるため、元のファイルは上書きされますか?
回答:
期待される結果は空の/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
。
また、便利な場合もあります。
bash: /etc/hosts: Permission denied
これをとして実行している場合を除いて、エラーが発生するはずです(シェルがbashであると想定)root
。/etc/hosts
通常、rootのみが書き込み可能です。これを実行してroot
いる場合(実際には実行しないでください)、/etc/hosts
Michael Homerが説明したように空になります。