Журнал LinuxFormat - перейти на главную

LXF78:Вопрос? Ответ!

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Безbashенному)
Строка 15: Строка 15:
 
Здесь «А» – параметр, вводимый с клавиатуры. ''echo'' посылает его в ''stdout'', далее канал (|) перенаправляет его следующей команде: '''&0''' – дескриптор для stdin, а '''<&0''' направляет ввод на команду.
 
Здесь «А» – параметр, вводимый с клавиатуры. ''echo'' посылает его в ''stdout'', далее канал (|) перенаправляет его следующей команде: '''&0''' – дескриптор для stdin, а '''<&0''' направляет ввод на команду.
  
Согласно другому неписаному закону Linux, «для любой задачи существуют как минимум два способа выполнения». Вместо '''&0''', '''&1''' и '''&2''' Вы можете указать '''/dev/stdin''', '''/dev/stdout''' и '''/dev/stderr''' соответственно. Версии с '''&''' короче набирать, но '''/dev''' будут понятнее, если Вы откроете свой скрипт через полгодика. НБ
+
Согласно другому неписаному закону Linux, «для любой задачи существуют как минимум два способа выполнения». Вместо '''&0''', '''&1''' и '''&2''' Вы можете указать '''/dev/stdin''', '''/dev/stdout''' и '''/dev/stderr''' соответственно. Версии с '''&''' короче набирать, но '''/dev''' будут понятнее, если Вы откроете свой скрипт через полгодика. ''НБ''

Версия 12:41, 4 апреля 2008

Вопрос? Ответ!

  • Если вы завязли в какой-то проблеме и чтение HOWTO не помогает, почему бы не написать нам? Наши эксперты помогут вам разобраться даже в самых сложных проблемах.

Безbashенному

Вопрос: Я пытаюсь писать bash-скрипты с использованием утилит, требующих ввода с клавиатуры. Например, здесь без этого не обойтись:

update-alternatives --config xxx

Хотелось бы автоматизировать этот процесс с помощью параметра, передаваемого скрипту. На данный момент мое лучшее решение – записать в файл то, что нужно ввести с клавиатуры, запустить update-alternatives, направив поток ввода из этого файла, а затем удалить сам файл. Но должен быть другой путь. Как можно ввести параметр с клавиатуры, не записывая его во временный файл? Аноним, с форума LXF

Ответ:Запомните закон Linux (и Unix): «Все на свете – файлы», включая стандартные потоки ввода и вывода. Для них предусмотрены дескрипторы: &0 для стандартного ввода stdin, а &1 – для стандартного вывода stdout (кстати, &2 – это поток ошибок, stderr) . Вот что Вам нужно:

echo «A» | update-alternatives --config xxx <&0

Здесь «А» – параметр, вводимый с клавиатуры. echo посылает его в stdout, далее канал (|) перенаправляет его следующей команде: &0 – дескриптор для stdin, а <&0 направляет ввод на команду.

Согласно другому неписаному закону Linux, «для любой задачи существуют как минимум два способа выполнения». Вместо &0, &1 и &2 Вы можете указать /dev/stdin, /dev/stdout и /dev/stderr соответственно. Версии с & короче набирать, но /dev будут понятнее, если Вы откроете свой скрипт через полгодика. НБ

Персональные инструменты
купить
подписаться
Яндекс.Метрика