【发布时间】:2021-11-02 21:32:45
【问题描述】:
realpath <<<'foo' 失败“真实路径:缺少操作数”。我不知道那是什么意思。
realpath <(<<<'foo') 返回/proc/3443695/fd/pipe:[26244650] 我猜这意味着它正在创建一个包含字符串“foo”的临时管道。
或者printf 更清楚:
❯ printf "%q" <<<'foo' # no output
❯ printf "%q" <(<<<'foo')
/proc/self/fd/11%
我试图调用的实际程序不喜欢其中任何一个。我想我需要一个实际的文件。
我可以在多个命令中通过使用mktemp 创建一个文件然后写入它,然后将其作为arg 发送出去,但是zsh 是否有任何方便的语法可以就地执行此操作? 1 班轮?
【问题讨论】:
-
realpath不读取标准输入。因此realpath <<<foo没有意义。 -
@user1934428 对。我不太确定
<<<到底做了什么。我猜它会将右边的字符串发送到stdin?<<启动一个heredoc,<把右边的file发送到stdin? -
那时仍然对
<(<<<'foo')语法感到困惑。如果 "foo" 将在子 shell 中进入标准输入,而<需要一个文件名,那么如何从中获取 "/proc/self/fd/11" 作为参数? -
@mpen:注意
<...(重定向)与<(...)(进程替换)不同。尖括号在 shell 语法中用于许多不同的事情;混乱是很正常的:)。 -
@user1934428:
<(<<<something)确实会产生输出 - 试试cat <(<<<something)。它可用于通过此处字符串 (<<<) 将文本发送到仅接受输入文件且不理解标准输入的程序。<(print something)会达到同样的效果。
标签: zsh