在bash或shell中,如何将一行文本输入为文件而不创建临时文件?

3

问题 1:

我正在使用一个自制的命令,由于某些原因,无法更改。该命令需要一个文件名,以此来读取文件内容,例如:read-cmd "testtext.txt" 我知道可以使用文件输入流作为某些命令的输入,例如: some-cmd < "text.txt",但我想知道是否可以相反,即是否可以使用一行文本并使 bash 相信它是一个文件,以便我能够执行read-cmd "应该在文本文件中的内容"

我所能做的唯一一件事是

Example 1:
echo "contents of what should be in a text file" > tmptextfile
read-cmd "tmptextfile"
rm tmptextfile

然而,我真的不想这样做,而是想将该行作为文件流传输。有没有可能实现这一点,或者它完全依赖于read-cmd的工作原理?

问题2:

一个非常相似的问题,但是,文件不是命令的输入,而是命令选项的输入。所以,read-cmd2 -d "testtext.txt" ...

Example 2:
echo "contents of what should be in options text file" > tmpoptfile
read-cmd2 -d tmpoptfile ...
rm tmpoptfile

1
有趣!如果你只是使用管道并让你的命令从标准输入读取呢? - fedorqui
2
echo 'contents blah blah'| xargs read-cmd - Marc B
1个回答

5
你可以使用进程替换来实现这个目的:进程替换
read-cmd <(echo "contents of what should be in a text file")

进程替代是一种重定向形式,其中进程(一些命令序列)的输入或输出显示为临时文件。

使用一些内置实用程序进行测试,而不是我们不知道它在做什么的read-cmd。例如:grep -Eo '\b[tw][^ ]*' <(echo "应该在文本文件中的内容") - anubhava
当我使用这个来将文本传递给一个只接受文件作为参数的c ++可执行文件时,它会产生一个错误bad alloc? - user3442743
抱歉,实际上这适用于示例1。然而,对于示例2仍然不起作用。 - echolocation
1
明白为什么它没起作用,也知道为什么它可能对OP无效,因为过程替换不允许随机文件访问。 - user3442743
@echolocation:进程替换可以将命令输出作为文件提供给某些程序使用,但它无法与您的新命令read-cmd2 -d tmpoptfile一起使用。 - anubhava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接