grep的坑爹之處

grep是非常有用的篩選工具。我們可以拿他跟cat配合當做linux下的ctrl+F使用。

但是今天用到grep的時候發現它有一個坑跌的bug

爲了實驗需要,我要在腳本中臨時加入一個ipv6域名。像這樣:

host_name=2001:470:23:13::6

echo "tmp_host6 $host_name" >> /etc/hosts

# do something...

grep -v "tmp_host6" /etc/hosts > /etc/hosts

按照正常的理解這段腳本的作用是臨時把一個ipv6域名加入到hosts文件中,然後工作完成之後撤銷相關的更改。

但是,最後一句的grep是不能正常工作的。它的輸出是空!所以結果就是這句腳本清空了hosts文件!

正確的寫法是:

echo "`grep -v "tmp_host6" /etc/hosts`" > /etc/hosts

也就是把輸出當做字符串輸出,然後再重定向到hosts中去。


其實我做過其他實驗,同樣的用法grep都能正常重定向。就是這句不能。很費解。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章