この行では:
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/hostsMichael Homerが説明したように空になります。