【问题标题】:Shell Read File Line by Line IssueShell 逐行读取文件问题
【发布时间】:2016-01-22 03:16:26
【问题描述】:

假设我有一个文件(Input.txt),其中包含一些以下挖掘命令。

dig NS google.com
dig NS box.com
dig NS dropbox.com
dig NS cnn.com
dig NS bbc.co.uk

我只想从文件中执行 dig 命令,并且必须逐行读取。

目前我尝试使用

for i in $(cat Input.txt);do $i;done

我不确定,如何执行,我收到以下消息,因为找不到命令。

有什么解决这个问题的建议吗?

【问题讨论】:

  • 或者只是sh Input.txt
  • @Kenney:谢谢伙计!

标签: bash shell dig


【解决方案1】:

您可以创建一个 .sh 文件并放置重定向输出的命令,例如:

#!/bin/bash

dig NS google.com >> ~/google.log
dig NS box.com >> ~/box.log
dig NS dropbox.com
dig NS cnn.com
dig NS bbc.co.uk

【讨论】:

  • 他的文件已经一个脚本,而你的输出重定向只是无偿添加。
【解决方案2】:

试试:

. Input.txt

一个点后跟一个空格和文件名将执行文件中的每一行。

您的for 循环不起作用,因为它按单词而不是按行拆分输入。例如,它正在尝试执行命令google.com,因此出现“找不到命令”消息。

【讨论】:

  • 干得好;为了补充您的答案,这里的a link 解释了使用for 更详细地解析命令的问题以及如何正确执行(如果需要它)。
【解决方案3】:

您正在寻找eval 关键字。所以,用你的一般例子:

cat Input.txt | while read i;do eval $i;done

就个人而言,我倾向于建议执行此特定操作的更好方法是拥有您的域列表,然后执行以下操作:

xargs -n 1 -a /file/with/domains dig NS

根据您的数据源,xargs 解决方案可能比仅运行文件中的任何命令更安全。但这显然取决于您的真实数据文件中的内容。

【讨论】:

  • i 不会遍历完整的行;它遍历空格分隔的单词。
  • 天哪。这是漫长的一天。固定。
  • ... 几乎可以通过设置$IFS=\n修复
猜你喜欢
  • 2011-02-12
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 2012-06-13
  • 2016-11-22
相关资源
最近更新 更多