I have an executable that is used in a way such as the following:
executable -v -i inputFile.txt -o outputFile.eps
In order to be more effi
You can use the construct
<(command)
to have bash create a fifo with commands output for you. So just try:
-i <(echo "$inputData")
Note: zsh only:
To get a filename containing the contents of ${variable}
, use:
<(<<<${variable})
Note:
<<<${variable}
redirects STDIN
to come from ${variable}
<<<${variable}
is equivalent to (but faster than) cat <<<${variable}
So for the OP's case:
executable -v -i <(<<<${inputData}) -o outputFile.eps
executable -v -i <<<"${inputData}" -o outputFile.eps
will do the trick in bash.
Echo is not safe to use for arbitrary input.
To correctly handle pathological cases like inputdata='\ntest'
or inputdata='-e'
, you need
executable -v -i <(cat <<< "$inputData")
In zsh
, the cat
is not necessary
Edit: even this adds a trailing newline. To output the exact variable contents byte-by-byte, you need
executable -v -i <(printf "%s" "$inputData")