2015-06-20 2 views
-1

Я начинаю писать сценарии Bash, поэтому я запутался в архитектуре труб. Например, для базовых команд, таких как grep, нужно ли каким-то образом сконфигурировать и запрограммировать каналы для включения в команду? Или трубы просто автоматически передаются в выходные данные в качестве первого аргумента в отношении того, к чему идет передача?Как настроить и разрешить каналы в моем сценарии bash?

Мой главный вопрос: у меня есть сценарий, который принимает текст в качестве первого аргумента, используя что-то вроде my_script.sh text_file. Будут ли трубы работать автоматически, если я буду делать echo Hello | my_script.sh, или мне нужно будет следовать некоторому интерфейсу, чтобы разрешать трубы.

+1

'echo Hello | my_script.sh' будет писать Hello для стандартного ввода сценария bash, к которому можно получить доступ через команду 'read'. Если вы хотите, чтобы это как аргумент, используйте 'my_script.sh $ (echo Hello)', который на самом деле равен 'my_script.sh Hello' – msrd0

+1

, и ваш скрипт не может разрешать каналы, так как он не может запрещать каналы. – msrd0

ответ

1

В Unix-подобных системах, everything is a file. Выход из команды (опять же, это файл) в другой, поскольку вход называется pipe lining (или короткое замыкание трубопровода).

Итак, когда вы видите, набор команд следующим образом:

история | grep ls | less

history: возвращает список команд bash, введенных с терминала. Его выход подается в grep как вход. grep ls: находит все строки с буквами «ls». (Подумайте об этом как о каком-то фильтровальном механизме). И опять же, его конечный результат меньше, чем вход меньше: покажите экран, полный информации за раз, и ждет, когда пользователь нажмет ключ.

Назад к вопросу: Чтобы написать скрипт, который вводится со стандартного ввода, вы должны помнить, что читаете оттуда. Если ваш сценарий написан так, да, вы можете это сделать.

Here are a couple of examples, где вы можете найти, как писать такие скрипты.

Надеюсь, это поможет =]