return 1 if (x in 'ab') else 2 if (x in 'cd') else 3
Вы можете использовать конструкцию
<(command)
, чтобы bash создал fifo с выводами команд для вас. Поэтому просто попробуйте:
-i <(echo "$inputData")
executable -v -i <<<"${inputData}" -o outputFile.eps
выполнит трюк в bash.
<<<
направляет строку на стандартный ввод команды. Он ничего не помещает в командной строке и не делает его похожим на файл для чтения.
– ilkkachu
27 April 2017 в 21:00
Эхо небезопасно использовать для произвольного ввода .
Чтобы правильно обрабатывать патологические случаи, такие как inputdata='\ntest'
или inputdata='-e'
, вам нужно
executable -v -i <(cat <<< "$inputData")
В zsh
не требуется cat
Edit: даже это добавляет конечную новую строку. Чтобы вывести точное содержимое переменной по байтам, вам нужно
executable -v -i <(printf "%s" "$inputData")
Примечание: только zsh:
Чтобы получить имя файла, содержащее содержимое ${variable}
, используйте:
<(<<<${variable})
Примечание:
<<<${variable}
переадресации STDIN
, поступающие из ${variable}
<<<${variable}
, эквивалентно (но быстрее) cat <<<${variable}
Итак, для OP case:
executable -v -i <(<<<${inputData}) -o outputFile.eps
cat
, как в моем ответе выше (который первоначально пропустил кошку)
– Eric
25 June 2018 в 17:44
variable
, что в большинстве случаев не имеет значения, но, возможно, стоит обратить внимание на
– Eric
28 June 2018 в 17:22
Предполагая, что ваше имя исполняемого файла является exec и определено имя переменной x, и вы хотите передать значение x в качестве входного файла для исполняемого файла. Затем сделайте следующее:
$ echo $x > stdin && ./exec < stdin
это выполнит задание
inputData
содержит литеральные обратные косые черты, или-e
– Eric 27 March 2018 в 17:53