Подтвердить что ты не робот

Предложите ответ на ввод пользователя в сценарии bash

Вот пример:

#!/bin/bash
echo -e "Enter IP address: \c"
read
echo $REPLY

Но я хочу, чтобы пользователю было легче ответить. Я хотел бы предложить ответ пользователю. Он должен выглядеть примерно так:

Введите свой IP: 192.168.0.4

И пользователь может просто нажать "Enter" и согласиться с 192.168.0.4, или может удалить некоторые символы (например, удалить "4" с одним обратным пространством и вместо него ввести 3).

Как сделать такой ввод? Это возможно в bash?

4b9b3361

Ответ 1

bash read имеет поддержку readline (Edit: Jonathan Leffler предлагает также ввести приглашение)

#!/bin/bash
read -p "Enter IP address: " -e -i 192.168.0.4 IP
echo $IP

Ответ 2

То, как я это сделаю, это предложить значение по умолчанию в приглашении в скобках, а затем использовать расширение параметра значения по умолчанию для установки IP в 192.168.0.4, если они просто нажали enter, иначе он будет иметь введенное значение.

#!/bin/bash
default=192.168.0.4
read -p "Enter IP address [$default]: " IP
IP=${IP:-$default}
echo "IP is $IP"

Выход

$ ./defip.sh
Enter IP address [192.168.0.4]:
IP is 192.168.0.4

$ ./defip.sh
Enter IP address [192.168.0.4]: 192.168.1.1
IP is 192.168.1.1

Ответ 3

Классический способ сделать большую часть того, что вы хотите:

default="192.168.0.4"
echo -e "Enter IP address ($default): \c"
read reply
[ -z "$reply" ] && reply=$default
echo "Using: $reply"

Это не дает возможности редактирования.

Ответ 4

Редактирование нецелесообразно, но обычно это делается как:

echo -e "Enter IP address [$default]: \c"
read answer
if [ "$answer" = "" ]; then
     answer="$default"
fi