我遇到了this,爲了調試zsh行編輯器小部件,我複製了它,並且我意識到我實際上並不知道2>>|
實際上的功能。大概是將stderr送入一個文件,但|
的處理是什麼?Zsh重定向2 >> |
回答
>>|
是如何zsh
選擇從POSIX標準偏離另一個例子:
。注意,在該2>>
是2
附帶到這裏所討論的構建體;他們可以使用默認輸出流stdout(其文件描述符爲1
)或任何明確指定的文件描述符(如在此情況下爲stderr的2
)。
>>|
工作有點類似於POSIX的>|
構建,但僅在zsh
支持 - 其他主要POSIX兼容的貝殼 - bash
,dash
,ksh
和zsh
做不支持它。
POSIX >|
被意味着力更換一個現有文件即使noclobber
外殼選項生效,其根本目的的是防止這樣的替換(「重挫」)時,只使用>
。
請注意,noclobber
默認爲關閉,全部上述殼。
POSIX不不提到類似的>>|
結構和bash
,dash
,ksh
確實做不支持它。
理由是:由於>>
不會替換,而是將附加到現有文件,因此其操作不受noclobber
是否生效影響。
在這些貝殼,>>
是總是允許 - 輸出文件是否已經存在與否,noclobber
是否設置或沒有(和,如前所述,>>|
是在所有不支持)。
zsh
懇求不同,並且>>
IS受是否noclobber
是有效或不: 在一個(可以說邏輯)逆轉>
/>|
邏輯的,與效果noclobber
,>>
僅在目標文件(已經)存在時纔有效。
因此,zsh
支持>>|
(或>>!
)至力點播創建目標文件的,即使在作用noclobber
。
有幾種方式來設置/取消該noclobber
選項zsh
:
POSIX兼容的方式:
zsh -C -c '...'
- 通過命令打開在線選項-C
,當開始zsh
set -C
- 與打開設置內置
set -o noclobber
- 按名稱
如前所述打開,noclobber
爲OFF默認,但您可以通過簡單地替換-C
機智明確地關閉它h +C
或set -o
與set +o
。
zsh
特異性方式:setopt noclobber
- 等效的set -o noclobber
options[noclobber]=on
- 同上
setopt clobber
- 的等效options[clobber]=on
- 同上
啊,谷歌給了我答案。
從zsh的重定向文件,
> > |字
> >! word
與>>相同,只是該文件在不存在的情況下創建,即使CLOBBER未設置。
這基本上只是向文件提供stderr,創建它。所以我今天也瞭解了CLOBBER,這實際上是標準>>
的更「正常」形式。即,由於CLOBBER未被設置,>>
可能會出錯。
有趣。我想知道CLOBBER是如何打開和關閉的。 –
也許'setopt'或者什麼 –
@StevenLu,@TrevorHickey:是的,'setopt noclobber'和'setopt clobber'工作,但還有其他方法;看到我的答案。 – mklement0
- 1. 倒計時 - >重定向 - >重置
- 2. bash>重定向原子?
- 3. Soundcloud重定向Https - > Http
- 4. <noscript>重定向
- 5. Bash重定向:因爲`&> foo`意味着`> foo 2>&1`,有沒有`&>>?
- 6. PHP:郵政> Diaplay>等待>重定向
- 7. 此重定向「>>&<filename>」在Korn shell中工作嗎?
- 8. zsh別名 - >函數?
- 9. 意外重定向結果2>&1和命令提示
- 10. 的2階>&1重定向時STD錯誤文件
- 11. 返回$這個 - >重定向不是重定向到目標
- 12. 的.htaccess 301重定向 - >從重定向目錄
- 13. react-router>重定向不起作用
- 14. ASP> NET頁面重定向301
- 15. 重定向w。,ww。,wwww。 - > www
- 16. 重定向標準輸出數據「>」
- 17. _helper->重定向器,imagepaths丟失
- 18. 撤消全局STDERR - > STDOUT重定向
- 19. Cakedc.users =>總是重定向到主頁
- 20. 重定向paginator->排序在CakePHP的
- 21. $ this->重定向不起作用
- 22. 在html中重定向<object>
- 23. TypeScript tsc>消息重定向
- 24. 瞭解重定向使用>&
- 25. Yii :: app() - > user-> isGuest在重定向後返回true。
- 26. 差異重定向和$ APP->響應 - >在苗條
- 27. Python 3中是否有重定向操作符>>?
- 28. 阿帕奇HTTPS - > HTTP - > HTTPS 301重定向
- 29. 使用>> =在haskell中重定向上次操作的stdout
- 30. laravel:重定向() - >回() - >與()不發送任何消息
所以就像我違反規則製作更多帳戶以支持真正令人敬畏的答案一樣,對吧? –
@StevenLu :)我讚賞這種稱讚。 – mklement0