Вы можете использовать точку с запятой в оболочке bash, чтобы указать несколько команд. Иногда одна из этих команд вызывает вопрос, требующий ввода пользователем. (обычно «y»/«n» или что-то действительно) Если я знаю, о чем я хочу ответить заранее, есть ли способ как-то разобрать его на команды, как аргумент, или какой-то странный магический материал?Bash shell аргумент передача ...?
ответ
Вам не нужны никакие «странные магические материалы для труб», просто труба.
./foo ; echo "y" | ./bar ; ./baz
Или волшебный herestring синтаксис, если вы предпочитаете:
./foo ; ./bar <<<"y" ; ./baz
Вы можете использовать команду yes
положить много 'у «s к трубе.
Например, если вы хотите, чтобы удалить все текстовые файлы, вы можете использовать
yes | rm -r *.txt
вызывая каждый вопрос, заданный п.м. быть ответил с у. Если вы хотите ответить на другой по умолчанию, вы можете дать ему в качестве аргумента да:
OUTPUTyes n | rm -r *.txt
Это будет в «N».
Для получения дополнительной информации см http://en.wikipedia.org/wiki/Yes_(Unix)
Для простого ответа «да» есть команда yes, доступный на большинстве Unix и Linux платформа:
$ yes | /bin/rm -i *
Для продвинутого протокола вы можете захотеть проверьте знаменитый Expect, также широко доступный. Он нуждается в базовых знаниях Tcl.
Рискованный пример! Кроме того, есть печально известное поведение rm, когда ваш каталог содержит файл с именем -f ... –
Это пример 'yes', а не пример' rm'. – bobah
Иногда команда предоставляет возможность задать ответ по умолчанию на вопрос. Одним из примечательных примеров является apt-get
- менеджер пакетов для Debian/Ubuntu/Mint. Он предоставляет и опции -y
, --yes
, --assume-yes
для использования в неинтерактивных сценариях.
Во-первых, это не бас, который высказывает эти вопросы. Это конкретная программа (например, cp -i запрашивает перед перезаписыванием файлов). Часто эти команды также имеют переключатели для ответа на вопросы, например -y для fsck, или как -f переопределяет -i в rm. На многие программы можно было ответить через трубку, поэтому у нас есть команда «да», но некоторые идут на дополнительные длины, чтобы гарантировать, что они не могут; например, ssh при запросе паролей. Кроме того, в трубах нет ничего волшебного. Если программа только иногда задает вопрос, и имеет значение какой-то вопрос, есть инструменты, предназначенные для таких, как «ожидать».
В типичном сценарии оболочки, когда вы точно знаете, что вы хотите кормить в и программа принимает входные данные на стандартный ввод, вы можете справиться с этим, используя обычную трубу:
echo -e '2+2\n5*3' | bc
Если это больше кусок то здесь документ может быть полезным:
bc <<EOF
2+2
3*5
EOF
- 1. Bash передача строки аргумент питона сценария
- 2. Power shell Pass аргумент
- 3. Передача переменной из c-программы в shell-скрипт как аргумент
- 4. Разделительные символы строки, bash shell
- 5. Shell Bash Script
- 6. Unix Bash Shell сценариев
- 7. bash script shell input
- 8. Рекурсивная папка Bash Shell
- 9. Bash Shell Issue
- 10. Bash скрипт Shell Script
- 11. Bash Shell функции
- 12. Bash Shell Script - Cut
- 13. Bash Shell: Infinite Loop
- 14. Сценарии Bash/Shell
- 15. C Bash Shell Redirection
- 16. Shell Bash объявляет массив
- 17. Zero Padding Bash/Shell
- 18. bash shell code confusion
- 19. обход каталога bash shell
- 20. bash shell sys.path.append problem
- 21. bash передача аргументов недействительна (adb)
- 22. Передача аргументов BASH
- 23. Передача строки с пробелами как аргумент функции в bash
- 24. Shell скрипт с опциями и аргумент - Update
- 25. Debian Bash Shell Подстановка переменной ошибка
- 26. BASH - цикл через аргумент
- 27. Передача массива в функцию bash
- 28. Bash Script su exiting shell
- 29. bash shell wildcard pattern matching
- 30. Запуск bash shell в Maemo
Отличные ответы Мат, он отлично работает. Это все волшебное для меня.:) – cab00t
Btw, я знаю, что это не место для комментариев, подобных этому, но вы один из моих абсолютных героев ... 0 задавали вопросы, 98k баллов. Я хочу быть как ты, когда я вырасту. Любовь, ура! :) – cab00t