Shell Script, читать в той же строке после отображения сообщения - PullRequest
31 голосов
/ 15 марта 2012

Следуя скрипту, который я выполняю

#!/bin/sh

echo "Enter [y/n] : "
read opt

Его вывод

Enter [y/n] : 
Y

Я хочу, чтобы переменная читалась в той же строке, как показано ниже

Enter [y/n] : Y

Наверное, все должно быть просто, но я новичок в скриптах bash.

Ответы [ 3 ]

38 голосов
/ 15 марта 2012

Решение: read -p "Enter [y/n] : " opt

От help read:

  -p prompt output the string PROMPT without a trailing newline before
        attempting to read
35 голосов
/ 15 марта 2012

Шебанг #!/bin/sh означает, что вы пишете код либо для исторической оболочки Bourne (все еще встречающейся в некоторых системах, таких как Solaris, я думаю), либо, что более вероятно, для стандартного языка оболочки, определенного в POSIX. Это означает, что read -p и echo -n ненадежны.

Стандартное / портативное решение:

printf 'Enter [y/n] : '
read -r opt

(-r запрещает специальную обработку \, поскольку read обычно принимает это как продолжение строки, когда оно находится в конце строки.)

Если вы знаете, что ваш скрипт будет запускаться в системах с Bash, вы можете изменить шебанг на #!/bin/bash (или #!/usr/bin/env bash) и использовать все необычные функции Bash. (Многие системы имеют /bin/sh символическую ссылку на bash, поэтому он работает в любом случае, но полагаться на это - плохая практика, и bash фактически отключает некоторые из своих собственных функций при выполнении под именем sh.)

7 голосов
/ 15 марта 2012
echo -n "Enter [y/n] : " ; read opt

ИЛИ!(Позже лучше)

read -p "[y/n]: " opt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...