как многие из нас наверняка знают, это всегда хорошая идея, чтобы сделать вашу программу принять ввод stdin. Очень многие программы позволяют это делать в средах *nix. Это позволяет нам делать крутые вещи, как трубопроводы
echo "foo" | less
. Довольно часто можно обнаружить, что cat barfile | baz
логически эквивалентно baz barfile
как за кадром, это все равно чтение строк.
В настоящее время существует гораздо больше программ, к которым нельзя подключиться по умолчанию. Некоторые программы имеют флаг, который все еще позволяет поведение, упомянутое выше, но многие этого не делают.
теперь мой вопрос в том, существует ли временный файловый канал?
теперь, с моей буквально несуществующей способностью писать Bash и около 5 минут на Google, я придумал это
#!/bin/bash
if [ $# -ne 2 ]; then exit 1; fi
f=$(mktemp)
() > $f
if [ $? -eq 0 ]; then ( $f); else exit $?; fi
rm $f
называя это fpipe, мы можем делать такие вещи, как fpipe 'wget -O- www.example.com' baz
где baz-это программа, в которую мы не можем подключиться, но можем сделать baz file
.
мой вопрос в том, как мы можем сделать лучше. Я подозреваю, что с большим количеством знаний Bash, переписывание приведенного выше сценария, чтобы взять любое количество аргументов, было бы довольно тривиальным (так что мы можем делать такие вещи, как fpipe 'foo x' bar baz
где с кантом мы могли бы сделать что-то вроде foo x | bar | baz
. Ба, мы могли бы, вероятно, смешать два и в конечном итоге с такими вещами, как fpipe 'wget -O- www.example.org | rev' baz
.
существует конструкция, которая достигает этого? Мне кажется, я видел какую-то конструкцию foo x > bar < baz
или что-то в этом роде. Я бы подумал, что это довольно распространенная проблема, но мои поиски ничего не приносят вверх. Это означает, что я либо недостаточно сильно ищу, либо что мне не хватает чего-то довольно очевидного.
если для этого нет правильного способа(TM), можно ли определить удобный синтаксис? Скажи,foo x |> baz | rev
здесь |>
в значительной степени непосредственно переводится в мой сценарий.
PS: Я знаю, что мой /script/ очень хрупкий и наивный (например, выход из номера 0); Не стесняйтесь публиковать лучший.