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 with
auto_cdenabled (and
auto_cdshouldn't apply inside a process substitution anyway, since
SHIN_STDIN` 未设置)。
(抱歉;这可能更适合作为对问题的评论,而不是答案。)
我在管道中玩串联 运行:
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 with
auto_cdenabled (and
auto_cdshouldn't apply inside a process substitution anyway, since
SHIN_STDIN` 未设置)。
(抱歉;这可能更适合作为对问题的评论,而不是答案。)