2016-09-21 38 views

回答

1

我不完全確定你的意思是返回一個目錄。根據什麼zsh在這裏,echo <(-)會給你一個線索。它可能會打印/dev/fd/12之類的東西,或者根據您的系統打印臨時文件的名稱。

<(...)是一個zsh構造。 Zsh創建一個子shell並在命令stdout指向管道的情況下在子shell中運行命令。然後用/dev/fd/proc/self/fd取代管道的另一端,具體取決於您的操作系統。 -命令實際上是一個precommand修飾符,它不會單獨執行任何操作。所以在它完成任何事情之後,它就會結束並隨着它走向管道的盡頭。 cat讀取文件結束並依次退出。比較cat <(echo hi)之類的事情。

類似的形式=(...)強制使用臨時文件。如果您有像diff這樣的命令需要能夠在文件中尋找隨機位置,這非常有用。最後,有>(...)這將輸出到一個命令,有點像一個管道。

+0

是,'回聲<( - )'將打印'的/ proc /自/ FD/11',在我的系統上,這返回$ OLDPWD。我想知道這是否意外,或者是否可以預料。我理解你的解釋方式,但不是(1)爲什麼返回的東西不是一些臨時不存在的文件句柄,也不是(2)獲得$ OLDPWD的一致性。 –

+1

我想你已經有'-'別名到'popd'或'cd -'之類的東西了。除非設置了'pushd_silent'選項,否則它們會打印新的目錄。但是因爲'<(...)'中的命令在子shell中運行,所以目錄的更改不會在父目錄中生效。我認爲你使用的是像oh-my-zsh這樣的插件框架,如果你有別名,你不知道在那裏。 – okapi

+0

啊,就是這樣! zsh中的'alias'顯示''''確實是'cd -'的縮寫,可能確實是由'oh-my-zsh'中的一個(默認)插件引入的。 –

1

-是一個precommand修飾符;根據man zsh

-  The command is executed with a `-' prepended to its argv[0] 
      string. 

在表達式cat <(-),這應該等於空指令(沒有輸出自動成功)運行,如同其被命名爲-。不過,我不確定如何獲得與舊工作目錄相關的任何輸出。 cd -將打印工作目錄, but - doesn't trigger a directory change even with auto_cd enabled (and auto_cd shouldn't apply inside a process substitution anyway, since SHIN_STDIN`未設置)。

(道歉。這可能是更適合作爲關於這個問題的評論,而不是一個答案)