2015-10-22 42 views
0

比方說,我有一個文件(Input.txt)和一些下面的dig命令。Shell按行讀取文件行問題

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 

我不知道,這可怎麼執行,我碰到下面的消息未找到命令。

任何建議請解決這個問題?

+5

或者只是'sh Input.txt'。 – Kenney

+0

@Kenney:謝謝隊友! – Arun

回答

0

您可以創建一個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

他的文件已經*是*腳本,並且您的輸出重定向只是無償添加。 – chepner

2

嘗試:

. Input.txt 

一個點後跟一個空格和文件名,將在執行每行文件。

您的for循環不起作用,因爲它正在按字分開輸入,而不是按行分開。所以它試圖執行命令google.com,因此,「命令未找到」消息。

+0

是的,有這樣的伴侶歡呼! – Arun

+1

做得很好;爲了補充你的答案,這裏是[鏈接](http://mywiki.wooledge.org/DontReadLinesWithFor),它解釋了使用'for'更詳細地解析命令的問題,以及如何正確地執行它(如果需要的話) 。 – mklement0

-2

您正在查找的是eval關鍵字。所以,用你的普通例子:

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

就個人而言,我會傾向於認爲更好的方式來做到這一點具體的事情就是讓你的域名列表,這樣做:

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

根據您的數據源,xargs解決方案可能比僅運行文件中的任何命令更安全。但是,這顯然取決於您的真實數據文件中的內容。

+0

'i'不會遍歷整行;它遍歷空白分隔的單詞。 – chepner

+1

哦,當它。這是一個漫長的一天。固定。 – dannysauer

+0

...通過設置'$ IFS = \ n'幾乎可以解決這個問題 – dannysauer