我正在管道中连接并运行:
cat <(-)
zsh
在幕后做什么?
答案 0 :(得分:1)
我不完全确定你回复目录的意思。关于zsh在这里做什么,echo <(-)
会给你一个线索。它可能会打印/dev/fd/12
或类似临时文件的名称,具体取决于您的系统。
<( ... )
是一个zsh构造。 Zsh创建一个子shell并在子shell中运行命令,并将命令stdout定向到管道。然后,它会使用/dev/fd
或/proc/self/fd
替换管道的另一端,具体取决于您的操作系统。 -
命令实际上是一个预命令修饰符,不会单独执行任何操作。因此,在它完成任何事情之后它就会结束,并且随着它结束管道。 cat
读取文件结尾并依次退出。比较cat <(echo hi)
之类的内容。
类似的形式=( ... )
强制使用临时文件。如果您有一个像diff
这样的命令需要能够在文件中寻找随机位置,这将非常有用。最后,有>( ... )
将输出到命令,有点像管道。
答案 1 :(得分:1)
-
是一个预命令修饰符;根据{{1}}:
man zsh
在表达式 - The command is executed with a `-' prepended to its argv[0]
string.
中,这应该等于一个空命令(没有自动成功的输出)运行,好像它被命名为cat <(-)
。但是我不确定如何获得与旧工作目录相关的任何输出。 -
将打印新工作目录cd -
- , but
auto_cd doesn't trigger a directory change even with
auto_cd enabled (and
未设置SHIN_STDIN`。
(道歉;这可能更适合作为对问题的评论,而不是答案。)