zsh 中的 cat <(-) 返回哪个目录?

Which directory is returned by `cat <(-)` in zsh?

我在管道中玩串联 运行:

cat <(-)

zsh 在做什么?

我不完全确定你所说的返回目录是什么意思。关于 zsh 在这里做什么,echo <(-) 会给你一个线索。它可能会打印类似 /dev/fd/12 的内容,或者可能是临时文件的名称,具体取决于您的系统。

<( ... ) 是一个 zsh 结构。 Zsh 创建一个子 shell 并在子 shell 中运行命令,并将命令 stdout 定向到管道。然后根据您的操作系统使用 /dev/fd/proc/self/fd 替换管道的另一端。 - 命令,实际上是一个预命令修饰符,单独不执行任何操作。因此,在它什么都不做之后它就结束了,并且它结束了管道。 cat 读到文件末尾依次退出。比较 cat <(echo hi).

之类的东西会发生什么

类似的形式=( ... )强制使用临时文件。如果您有一个像 diff 这样的命令需要能够在文件中寻找随机位置,这将很有用。最后是>( ... ),会输出到命令,有点像管道。

- 是前置命令修饰符;根据 man zsh:

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

在表达式 cat <(-) 中,这应该相当于一个空命令(没有自动成功的输出)运行,就像它被命名为 - 一样。不过,我不确定您如何获得与旧工作目录相关的任何输出。 cd - 将打印 new 工作目录, but-doesn't trigger a directory change even withauto_cdenabled (andauto_cdshouldn't apply inside a process substitution anyway, sinceSHIN_STDIN` 未设置)。

(抱歉;这可能更适合作为对问题的评论,而不是答案。)