2015-04-01 3 views
1

У меня есть сценарий оболочки (main.sh), в котором первые несколько строк читают некоторые данные через вход пользователя.Как ввести приглашение ввода через скрипт оболочки

echo "Enter the model !!" 
    read model 
    echo "Enter the Weight !!" 
    read wgt 
    echo "enter the data file !!" 
    read datafile 
    echo "Enter the two column names !!" 
    read coll1 coll2 

эти переменные $ модели, $ WGT, $ Datafile, $ Coll1, $ Coll2 используются в остальной части программы. Когда я запускаю это ./main.sh и выдаю входы соответственно MODEL, WGT, DATA, COL1 COL2, все работает нормально. Но я хочу передать эти данные через файл. Таким образом, я создал еще один файл сценария, который содержит

echo "COL1 COL2" | echo "DATA" | echo "WGT" | echo "MODEL" | ./main.sh 

его только первый вход, то есть МОДЕЛЬ. Есть ли способ сделать это правильно?

ответ

2

Не эхо эхо-сигнала. echo не читает стандартный ввод, и поэтому вы теряете все, кроме последнего. Кроме того, если это сработало как написано, это, скорее всего, будет назад.

Вы хотите что-то более, как это:

{ 
    echo "MODEL" 
    echo "WGT" 
    echo "DATA" 
    echo "COL1 COL2" 
} | ./main.sh 

Который, конечно, также может быть просто:

printf 'MODEL 
WGT 
DATA 
COL1 COL2 
' | ./main.sh 
+1

Или ' printf "% s \ n" MODEL WGT DATA 'COL1 COL2'' в одной строке кода. –

+0

@JonathanLeffler Действительно. Я почти пишу 'printf 'X \ nX \ nX \ nX \ n'', но полагал, что это было чрезмерно и немного трудно читать. Но эту версию гораздо легче читать. –

+0

Это работает. Но если я хочу дать какое-то количество (скажем, моя WGT на самом деле 1,5), что мне делать? –

0

Изменить ваш main.sh, чтобы получать эти различные параметры в качестве аргументов, а не по стандарту и затем вызывать его так

./main.sh $COL1 $COL2 $DATA .... 
+1

Рекомендация использовать аргументы, а не подсказывать для ввода, хороша, но не отвечает на вопрос. Я также предлагаю ответить на этот вопрос. –

+0

Достаточно честный. Я чувствовал, что подход, который он использовал, не является обычным идиомом оболочки, и его лучше избегать. –

0

Вы, п сделать это следующим образом:

В main сценария:

coll1=$1 
coll2=$2 
datafile=$3 
wgt=$4 
model=$5 

Затем запустить главный сценарий, как это:

./main col1 col2 data wgt model 

Вы должны поддерживать последовательность ...

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