2011-07-20 97 views
12

在正常的bash重定向>重定向標準輸出到一個文件時,它的存在和覆蓋>>重定向標準輸出到一個文件,當它存在追加。什麼>!和>>!做tcsh的

在一個tcsh(c shell)腳本中,我發現使用了運算符>!>>!。這個操作員做什麼? tcsh中確實也有>>>運營商,所以有什麼區別?

回答

28

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文件
+1

請注意,bash有類似的東西。它有自己的「noclobber」選項(通常不會設置),並使用「> |」和「>> |」重寫它。 –

3

在某些情況下,感嘆號會禁止檢查正在寫入的文件的類型。

引述tcsh手冊頁:

如果shell變量noclobber選項設置,那麼該文件必須不存在或者是一個字符專用文件(例如終端或「的/ dev/null的」)或者出現錯誤結果。這有助於防止意外破壞文件。在這種情況下,'!'表格可以用來抑制這種檢查。