bash - 从期望脚本调用 bash shell 脚本失败:“没有这样的文件或目录”
问题描述
我很难从我的期望脚本执行 bash shell 脚本。我有一个期望脚本,如下所示,它更改了运行它的机器的 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"
但仍然没有什么不同。权限设置正确,重启脚本从命令行正确运行。有人可以告诉我我做错了什么吗?
解决方案
#!/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
推荐阅读
- javascript - 如何使用数组更改 html 元素属性
- css - 显示顺风动画
- ssl - 带有自签名 ssl 证书的 prometheus 的 Https
- svelte - 如何在 SvelteKit 中添加自定义 404 页面和不同的错误页面(针对其他错误)?
- java - 为什么 GLES30.glUniformMatrix4fv 会产生 GL_INVALID_OPERATION?
- c++ - C++ lambda 函数中强制 decltype 的情况
- mongodb - mongodb查询格式约定
- sql - 是否可以创建两个具有不相交标识符的表?
- java - 每个布尔真组合的新线程
- java - 更新数据库和java中的子行时出错