Linux Bash脚本循环执行nslookup仅运行一次的原因是什么?
故障根因
你代码里的exec命令是导致循环提前终止的核心原因:
- Bash中
exec的作用是用指定命令的进程替换当前运行脚本的Shell进程,不会生成新的子进程,exec调用的命令执行完成后,原Shell进程会直接退出,后续的循环逻辑自然没有运行机会。
修复方案
直接删除exec关键字即可,不需要把命令赋值给变量再执行的话,代码可以简化为:
for HOST in $(cat ./rhel_hosts) do echo echo "EXECUTING ==> nslookup ${HOST}" nslookup ${HOST} done
额外优化建议
你当前用for循环读文件的写法存在兼容性问题:如果文件行内有空格、通配符等特殊字符,会被Shell自动拆分,导致读取的HOST值不符合预期,更稳妥的逐行读取写法如下:
# 逐行读取文件,兼容行尾无空行、带特殊字符的场景 while IFS= read -r HOST || [ -n "${HOST}" ] do echo echo "EXECUTING ==> nslookup ${HOST}" nslookup "${HOST}" done < ./rhel_hosts
内容的提问来源于stack exchange,提问作者T. Ujasiri
相关产品推荐
相关产品推荐

