2016-09-16 3 views
0

Я хотел бы жестко скопировать некоторые входы в мою команду сценария bash. Например, у меня есть Баш скрипт так:Входная строка с форматированием в команду bash

#! /bin/bash 
apt-get install python 

, и я хотел бы жестко закодировать y и enter в качестве входных данных для apt-get команды в этом Баш скрипт, так как пользователь иногда может б попросили подтвердить пространство установки. Я знаю, что могу сделать

apt-get install python <<< 'y' 

передать строку ввода y, но я могу также ввести специальный формат, как символ новой строки «\ п», используя этот метод? Благодаря!

+0

В целом, имитируемый ввод конечного пользователя в сценарии чрезвычайно хрупкий. Поскольку программы предназначены для такого ввода, предоставляемого человеком, который может читать и следовать указаниям (а не сценарию, который слепо делает то же самое каждый раз), обычно не принимаются ограничения совместимости, которые препятствуют изменению требуемого ввода произвольным образом между релизами или на основе условий, наблюдаемых во время выполнения. –

+0

... В отличие от этого, если вы можете найти и использовать программный интерфейс для указания конфигурации, эти интерфейсы гораздо более подвержены гарантиям совместимости вперед. –

+0

Спасибо @CharlesDuffy за все ваши предложения, они очень полезны! –

ответ

2

Все опоры автоматически завершаются новой строкой, поэтому это может не делать то, что вы хотите. (Многие программы рассматривают, поступает ли их вход от TTY, и изменяют, как и как они запрашивают на основе результата, другие читают подсказки, предназначенные для того, чтобы получить от пользователя непосредственно от TTY и, таким образом, содержимое байпасного содержимого, heredocs, и целиком).

Это сказал, для буквального ответа на вопрос:

apt-get install python <<<$'y\n' 

Вы можете также использовать Heredoc:

apt-get install python <<EOF 
y 

EOF 

Тем не менее, для конкретного случая apt-get, дон Не делай этого!

apt-get install -y python 

... действительно лучшая практика. (И для команд системного администрирования, как правило, их разработчики обычно используют для пакетного или автоматизированного использования, поэтому запросы от конечных пользователей редко требуются - посмотрите в документации каждой программы такие аргументы, как --batch, --force, --always или --yes; переменные окружения, которые указать элементы, которые в противном случае были бы предложены, или поведение, активируемое, если stdin не является TTY).

2

apt-get -y install python - правильный путь. Согласно: страница руководства

-y, --yes, --assume-да
Автоматическая да подсказками; предположите «да» в качестве ответа на все приглашения и выполняйте неинтерактивно. Если возникает нежелательная ситуация, например, изменение удерживаемого пакета, попытка установки пакета без проверки подлинности или удаление основного пакета , то apt-get будет прерван. Элемент конфигурации: APT :: Get :: Предположим-Да.

+0

Я предполагаю, что apt-get - это просто пример ожидания и что OP хочет что-то общее, чтобы работать с командой «bash». Если это законно объект их вопроса, то это абсолютно «Правильная вещь». –

+0

Да, я согласен, что на самом деле я не ответил на этот вопрос. Вместо этого я рассматривал это как проблему XY. – paddy

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