using a Bash variable in place of a file as input for an executable

后端 未结 4 1615
误落风尘
误落风尘 2020-12-15 04:35

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

相关标签:
4条回答
  • 2020-12-15 05:19

    You can use the construct

    <(command)
    

    to have bash create a fifo with commands output for you. So just try:

    -i <(echo "$inputData")
    
    0 讨论(0)
  • 2020-12-15 05:22

    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
    
    0 讨论(0)
  • 2020-12-15 05:27
    executable -v -i <<<"${inputData}" -o outputFile.eps
    

    will do the trick in bash.

    0 讨论(0)
  • 2020-12-15 05:34

    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")
    
    0 讨论(0)
提交回复
热议问题