2016-05-24 5 views
1

Как определить функцию bar в сценарии Bash, так что echo foo | bar в этом скрипте будет читать входные данные из stdin скрипта, а не для канала? Другими словами, если bar является:Как я могу из stdin даже при вызове в трубе

function bar(){ 
    read ZOO 
} 

Я хочу, чтобы ждать моего входа, а не установка ZOO в "foo"

+2

труба закрывается 'stdin' и заменяет его' stdout' из ранее прикован команды. После прочтения трубы вам придется вручную заменить ее. Что вы пытаетесь сделать точно? Работает ли 'echo foo && bar'? –

+0

Единственной причиной вызова 'bar' в этом модуле будет присвоение строки' foo' 'ZOO'. Я думаю, вам нужен более сложный пример, чтобы продемонстрировать, что вы пытаетесь сделать. – chepner

ответ

4

Идея трубы для подключения стандартный вывод процесса на левой сторона трубы с stdin процесса на правой стороне трубы. Таким образом, foo в этом случае подключается к модулю функции bar().

Если вы хотите прочитать явно из текущего терминала, а затем передать the special device /dev/tty в поток ввода read:

function bar() { 
    read ZOO < /dev/tty 
} 
+1

Возможно, стоит упомянуть '-r' и проблему с обратными слэшами и т. Д. – andlrc

+1

Вопрос не говорит об этом. Имо, который здесь не принадлежит. – hek2mgl

Смежные вопросы