进程替换,/ dev / fd / 63

时间:2018-03-22 16:49:53

标签: file-descriptor fileoutputstream process-substitution

我有一个脚本,在$ 1中将文件名作为输入,并处理它...并创建一个输出文件$ {1} .output.log,它工作正常。例如如果我试过 ./myscript filename.txt

它将处理并生成名称为:filename.txt.output.log的输出文件

但是当我试图替换一个进程来为这个脚本提供输入时 ./myscript<(echo something),它失败了,因为它无法再使用$ {1}创建文件。 output.log;因为现在$ 1不是一个实际的文件,并且在我的工作目录中不存在,其中脚本是为了创建一个输出。

有任何解决此问题的建议吗?

1 个答案:

答案 0 :(得分:0)

问题可能是,使用进程替换时,您尝试在/ dev中创建文件,更具体地说是在/dev/fd/63.output.log中创建文件 我建议这样做:

output_file="$( sed 's|/dev/fd/|./process_substitution-|' <<< ${1} ).output.log"
echo "my output" >> "$output_file"

我们使用sed将/ dev / fd /替换为./process_substitution-,因此该文件将在当前工作目录(pwd)中创建,名称为process_substitution-63.output.log