我有一个可执行文件,其使用方式如下:
executable -v -i inputFile.txt -o outputFile.eps
为了更高效,我想使用 Bash 变量代替输入文件。所以,我想做如下的事情:
executable -v -i ["${inputData}"] -o outputFile.eps
在这里,方括号代表一些聪明的代码。
你知道一些技巧可以让我以这种方式将信息传递到所描述的可执行文件中吗?
非常感谢你的协助
您可以使用以下构造:
<(command)
因此,要让 bash 使用命令为您创建一个 FIFO,而不是您的尝试-i ["${inputData}"]
,您可以这样做:
-i <(echo "$inputData")
因此,这是您的最终总命令:
executable -v -i <(echo "$inputData") -o outputFile.eps
要正确处理inputdata='\ntest'
or之类的病理情况inputdata='-e'
,您需要
executable -v -i <(cat <<< "$inputData")
在zsh
中,cat
是不必要的
编辑:即使这增加了一个尾随换行符。要逐字节输出确切的变量内容,您需要
executable -v -i <(printf "%s" "$inputData")
注意:仅限 zsh:
要获取包含 的内容的文件名${variable}
,请使用:
<(<<<${variable})
笔记:
<<<${variable}
重定向STDIN
来自${variable}
<<<${variable}
相当于(但比)快cat <<<${variable}
所以对于OP的情况:
executable -v -i <(<<<${inputData}) -o outputFile.eps
executable -v -i <<<"${inputData}" -o outputFile.eps
会在 bash 中解决问题。