パブリックDNS名を使用してAmazonec2に頻繁に接続します
(ec2-12-34-56-78.compute-1.amazonaws.com
)そしてこのため、私のknown_hosts
ファイルはたくさんのec2
エントリで圧倒されてしまいます。
おそらくsed -i
を使用してその場で編集できることはわかっていますが、grep
を使用したかったので、次のようにしました。
grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/known_hosts
これにより、known_hosts
は空のファイルとして残ります。私が行った場合:
grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/tmp
mv ~/.ssh/tmp ~/.ssh/known_hosts
それなら問題はありませんが、同じファイルの読み取りと書き込みで空白のままになる理由と、grep
、cat
などを使用するときにこれを回避する方法があるかどうか混乱しています。
moreutils スイートの一部であるsponge
というユーティリティがあります。それはまさにこの目的のために作られました。
grep -v ec2 ~/.ssh/known_hosts | sponge ~/.ssh/known_hosts
リダイレクトは、コマンドが実行される前にシェルによって実行されます。これは、grep
がファイルを読み取る機会を得る前に、シェルがファイルを切り捨てるように指示されていることを意味します。シェルリダイレクトを使用している場合、これを回避する方法はありません。