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

时间:2016-09-21 10:34:23

标签: zsh

我正在管道中连接并运行:

cat <(-)

zsh在幕后做什么?

2 个答案:

答案 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`。

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