Я пытаюсь сделать сценарий для получения списка ip из файла и показать его на экране с опцией выбора и сделать ssh на этот IP, просто выбрав. Файл выглядит следующим образом;Меню опций с массивом
name1 1.1.1.1
name2 2.2.2.2
name3 3.3.3.3
name4 4.4.4.4
Ниже сценарий может прочитать список из файла и показывает его на экране, как menu.It показывает как имя и IP-адрес для выбора, но я хочу, чтобы показать меню выбора просто по имени. Как я могу это достичь?
PS3='Please enter your choice: '
readarray -t options < ./file.txt
select opt in "${options[@]}"
do
IFS=' ' read name ip <<< $opt
case $opt in
$opt) ssh $ip;;
esac
done
1) name1 1.1.1.1
2) name2 2.2.2.2
3) name3 3.3.3.3
4) name4 4.4.4.4
Please enter your choice: 1
Вы отметили свой вопрос [tag: sh], но используете команду 'readarray', которая не существует в оболочке POSIX. Вы уверены, что это не вопрос [tag: bash]? – ghoti
Мое предположение: вы используете версию 'bash' до 4.3, у которой была ошибка, которая требовала, чтобы' $ opt' был указан в этой строке, чтобы расщепление произошло должным образом. Попробуйте 'IFS = '' прочитать имя ip <<<" $ opt "'. – chepner
(Чтобы уточнить, ваш код должен работать нормально в 'bash' 4.3 или новее.) – chepner