【问题标题】:nslookup command in loop, only executes once in Linux Bash script [duplicate]循环中的nslookup命令,仅在Linux Bash脚本中执行一次[重复]
【发布时间】:2023-03-10 07:05:02
【问题描述】:

在以下脚本块中,我尝试对从文件中读取的每个 fqdn 执行 nslookup。但是,脚本在执行第一个 nslookup 命令后停止。代码:

for HOST in `cat ./rhel_hosts`
do
       echo;
       echo "EXECUTING ==> nslookup ${HOST}"
       CMD="nslookup ${HOST}"       
       exec $CMD
done

知道为什么没有后续执行 nslookup 命令吗?

【问题讨论】:

  • exec 停止你的 shell 运行。
  • 顺便说一句,请注意全大写变量在保留空间中。为您自己定义的变量使用小写名称将防止您意外覆盖对 shell 有意义的内容。
  • 请参阅BashFAQ #1 re:在 bash 中逐行迭代文件的最佳实践。使用它,这看起来更像while IFS= read -r line; do printf '%s\n' '' "EXECUTING ==> nslookup $line"; nslookup "$line"; done <./rhel_hosts
  • 为什么首先需要将命令放入变量中?

标签: linux bash for-loop nslookup


【解决方案1】:

替换

exec $CMD

只有

$CMD

exec 命令将 shell 进程替换为您执行的程序,而不是在子进程中运行它。循环结束,因为进程中不再执行 shell 脚本。

【讨论】:

  • 请注意,$CMD 也不是一个好主意。最好只使用nslookup "$HOST" 而根本没有CMD 变量。
  • 确实如此,但脚本可能还有更多功能需要使用动态命令。
  • 也许,但如果这是真的,BashFAQ #50 中教授的方法之一将是更好的选择。
  • @CharlesDuffy 我感觉他真正想要的是eval。
  • 很有可能,但如果答案是 eval,那么很可能有人问错了问题。
猜你喜欢
  • 2011-09-15
  • 2018-11-27
  • 1970-01-01
  • 2016-09-07
  • 2014-10-04
  • 2018-12-14
  • 1970-01-01
  • 2015-04-02
  • 2014-03-05
相关资源
最近更新 更多