Вызов сценария оболочки bash из ожидаемого сценария завершается неудачно: «нет такого файла или каталога» - PullRequest
0 голосов
/ 15 октября 2019

У меня проблемы с выполнением скрипта bash из моего ожидаемого скрипта. У меня есть сценарий ожидания, показанный ниже, который изменяет IP-адрес компьютера, на котором он работает.

#!/usr/bin/expect -f
set new_ipaddr [lindex $argv 0]
set password [lindex $argv 1]
set timeout 2

if {[llength $argv] != 2} {
  send_user "Usage: ./set_ip.sh ipaddress password\n"
  exit 1
}
spawn sudo nmcli con mod "Wired connection 1" ipv4.address $new_ipaddr/24

expect {
    password { send "$password\r"; exp_continue }
    timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
}

send_user "setting Gateway\n"
spawn sudo nmcli con mod "Wired connection 1" ipv4.gateway 10.10.10.254

send_user "setting Static IP\n"
spawn sudo nmcli con mod "Wired connection 1" ipv4.method manual
spawn sudo nmcli con up "Wired connection 1"

spawn "./reboot.sh $password"

close

Чтобы эффект вступил в силу, машина должна перезагрузиться, поэтому я запускаю сценарий bash, чтобы выполнить перезагрузку. Сценарий reboot.sh не выполняется, сообщая

couldn't execute "reboot.sh": no such file or directory
    while executing
"spawn reboot.sh $password"

Сценарий reboot.sh находится в домашней папке, так же, как и запущенный сценарий. Я также пробовал

spawn "~/./reboot.sh $password"

, но все равно ничем не отличается. Права доступа установлены правильно, и сценарий перезагрузки запускается правильно из командной строки. Может кто-нибудь сказать мне, что я делаю не так, пожалуйста?

1 Ответ

0 голосов
/ 15 октября 2019
#!/usr/bin/expect -f
set new_ipaddr [lindex $argv 0]
set password [lindex $argv 1]
set timeout 2

if {[llength $argv] != 2} {
  send_user "Usage: ./set_ip.sh ipaddress password\n"
  exit 1
}
spawn sudo nmcli con mod "Wired connection 1" ipv4.address $new_ipaddr/24

expect {
    password { send "$password\r"; exp_continue }
    timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
}

send_user "setting Gateway\n"
spawn sudo nmcli con mod "Wired connection 1" ipv4.gateway 10.10.10.254

send_user "setting Static IP\n"
spawn sudo nmcli con mod "Wired connection 1" ipv4.method manual
spawn sudo nmcli con up "Wired connection 1"

spawn ./reboot.sh "$password"
interact 
...