在正常的bash重定向>
重定向標準輸出到一個文件時,它的存在和覆蓋>>
重定向標準輸出到一個文件,當它存在追加。什麼>!和>>!做tcsh的
在一個tcsh(c shell)腳本中,我發現使用了運算符>!
>>!
。這個操作員做什麼? tcsh中確實也有>
和>>
運營商,所以有什麼區別?
在正常的bash重定向>
重定向標準輸出到一個文件時,它的存在和覆蓋>>
重定向標準輸出到一個文件,當它存在追加。什麼>!和>>!做tcsh的
在一個tcsh(c shell)腳本中,我發現使用了運算符>!
>>!
。這個操作員做什麼? tcsh中確實也有>
和>>
運營商,所以有什麼區別?
tcsh中重定向的!符號表示即使已設置noclobber
,也會覆蓋現有文件。
換句話說,如果noclobber選項設置,那麼:
cmd > file
會寫stdout
到文件如果文件不存在,如果文件存在cmd >> file
cmd > file
將失敗將追加如果到文件文件存在cmd >> file
將失敗文件不存在cmd >! file
會寫stdout
到文件,覆蓋任何現有文件cmd >>! file
將追加stdout
到文件,創造,如果它的文件不存在如果noclobber
是不是設置然後!有沒有效果:
cmd > file
會寫stdout
到文件,覆蓋任何現有文件cmd >> file
將追加stdout
到文件cmd >! file
會寫stdout
到文件,覆蓋所有現有文件cmd >>! file
將追加stdout
到文件在某些情況下,感嘆號會禁止檢查正在寫入的文件的類型。
引述tcsh手冊頁:
如果shell變量noclobber選項設置,那麼該文件必須不存在或者是一個字符專用文件(例如終端或「的/ dev/null的」)或者出現錯誤結果。這有助於防止意外破壞文件。在這種情況下,'!'表格可以用來抑制這種檢查。
請注意,bash有類似的東西。它有自己的「noclobber」選項(通常不會設置),並使用「> |」和「>> |」重寫它。 –