从 expect 脚本调用 bash shell 脚本失败:"no such file or directory"

Calling bash shell script from expect script fails : "no such file or directory"

我无法从我的 expect 脚本执行 bash shell 脚本。 我有一个 expect 脚本,如下所示,它更改 运行ning 所在机器的 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 脚本位于主文件夹中,与 运行ning 脚本相同。我也试过

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

但仍然没有什么不同。权限设置正确,重启脚本 运行 从命令行正确设置。 有人可以告诉我我做错了什么吗?

#!/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