Чтение встроенного значения, как если бы это был файл [duplicate]

  return 1 if (x in 'ab') else 2 if (x in 'cd') else 3  
11
задан d3pd 13 February 2013 в 00:34
поделиться

5 ответов

Вы можете использовать конструкцию

<(command)

, чтобы bash создал fifo с выводами команд для вас. Поэтому просто попробуйте:

-i <(echo "$inputData")
21
ответ дан mikyra 15 August 2018 в 17:25
поделиться
  • 1
    Эта замена процесса - именно то, что мне нужно. Большое спасибо за вашу помощь! – d3pd 13 February 2013 в 23:10
  • 2
    Я столкнулся с некоторой командой, которая должна искать входной файл, где трубка fifo не работает. Zsh имеет a = (), реализованный как временный файл, который работает хорошо. – misssprite 29 January 2015 в 08:40
  • 3
    gnu.org/software/bash/manual/bash.html#Process-Substitution стоит прочитать этот раздел – Sławosz 30 November 2015 в 09:51
  • 4
    Это не выполняется, если inputData содержит литеральные обратные косые черты, или -e – Eric 27 March 2018 в 17:53
  • 5
    Для решения, которое работает в тех случаях, когда упоминается @Eric, см. здесь . – Tom Hale 25 June 2018 в 11:08
executable -v -i <<<"${inputData}" -o outputFile.eps

выполнит трюк в bash.

-3
ответ дан Andrey Gusakov 15 August 2018 в 17:25
поделиться
  • 1
    Строка здесь <<< направляет строку на стандартный ввод команды. Он ничего не помещает в командной строке и не делает его похожим на файл для чтения. – ilkkachu 27 April 2017 в 21:00

Эхо небезопасно использовать для произвольного ввода .

Чтобы правильно обрабатывать патологические случаи, такие как inputdata='\ntest' или inputdata='-e', вам нужно

executable -v -i <(cat <<< "$inputData")

В zsh не требуется cat


Edit: даже это добавляет конечную новую строку. Чтобы вывести точное содержимое переменной по байтам, вам нужно

executable -v -i <(printf "%s" "$inputData")
3
ответ дан Eric 15 August 2018 в 17:25
поделиться

Примечание: только zsh:

Чтобы получить имя файла, содержащее содержимое ${variable}, используйте:

<(<<<${variable})

Примечание:

  • <<<${variable} переадресации STDIN, поступающие из ${variable}
  • <<<${variable}, эквивалентно (но быстрее) cat <<<${variable}

Итак, для OP case:

executable -v -i <(<<<${inputData}) -o outputFile.eps
1
ответ дан Tom Hale 15 August 2018 в 17:25
поделиться
  • 1
    Это работает только в zsh, а не bash - чтобы сделать эту работу в bash, вам нужен cat, как в моем ответе выше (который первоначально пропустил кошку) – Eric 25 June 2018 в 17:44
  • 2
    Спасибо, обновлено. – Tom Hale 28 June 2018 в 09:06
  • 3
    Это также выводит конечную новую строку после содержимого variable, что в большинстве случаев не имеет значения, но, возможно, стоит обратить внимание на – Eric 28 June 2018 в 17:22

Предполагая, что ваше имя исполняемого файла является exec и определено имя переменной x, и вы хотите передать значение x в качестве входного файла для исполняемого файла. Затем сделайте следующее:

$ echo $x > stdin && ./exec < stdin

это выполнит задание

-3
ответ дан yabhishek 15 August 2018 в 17:25
поделиться
  • 1
    "Я хочу использовать переменную Bash вместо входного файла - вы только что создали входной файл, и именно этот вопрос пытался избежать – Eric 27 March 2018 в 22:40
Другие вопросы по тегам:

Похожие вопросы: