Как я могу прочитать значение из второго файла sh в bash? - PullRequest
1 голос
/ 03 июля 2019

Я настраиваю решение для сбора информации с сотового маршрутизатора. В моем скрипте main.sh запускаются другие файлы (* .sh) в зависимости от модели маршрутизатора.

Поэтому, если я хочу получить информацию о маршрутизаторе cisco, я выполняю main.sh, который выполняет InformationCisco.sh.

В последнем файле оболочки я должен прочитать значение, но

  read -p
or 
  echo -n then read

не работает.

main.sh

./InformationCisco.sh

РЕДАКТИРОВАТЬ: InformationCisco.sh


sshpass -p "$MDPssh" ssh -o StrictHostKeyChecking=no admin@"$IPaddress"  "cat /proc/net/arp" > "$MACtxt"
testMAC=$(awk 'NR==3{print $4}' $MACtxt | cut -d ' ' -f23)

if [ -z "$testMAC" ]; then

    MacAddressPlayer=$(awk 'NR==2{print $4}' $MACtxt | cut -d ' ' -f23)
    echo "MAC address Player : $MacAddressPlayer"

else

    echo "2 MAC address in ARP"
    echo "You have to find the correct MAC address for the player"
    cat $MACtxt
    read -p "Enter the right MAC address : " MacAddressPlayer
    MAC_Choice $typeMAC
    echo "MAC address Player : $MacAddressPlayer"

fi

Я прочитал таблицу ARP моего маршрутизатора, чтобы захватить подключенное к нему устройство. Для этого я использую sshpass, где я могу ввести свой пароль (не волнуйтесь, мой пароль не ясен, это просто упрощение). Функция чтения не останавливается, когда находится во втором запущенном файле оболочки.

Что я должен изменить, чтобы чтение ожидало ввода?

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Вполне возможно, что в вашем контексте какой-то символ \n уже был отправлен на стандартный ввод процесса, и read -p немедленно его использует.

0 голосов
/ 03 июля 2019

В main.sh попробуйте:

source InformationCisco.sh

Таким образом, он не будет запускать скрипт в отдельном процессе (который может быть не подключен к вашему сеансу).

...