2017-07-23 59 views
0

CMD我寫了一個腳本,其中包括這個循環:bash腳本 - 使用的,而不是貓

#!/bin/bash 

cat "$1" | while read -r line; do 
    echo "$line"; sleep 2; 
done 

一個shellcheck運行撲滅了以下消息:

SC2002:無用的貓。考慮'cmd <文件| ..'或'cmd文件| ..'代替。

我改變了腳本:

CMD:

#!/bin/bash 

cmd < "$1" | while read -r line; do 
    echo "$line"; sleep 2; 
done 

但現在的bash退出未發現

我做了錯誤的命令?

+4

'cmd'是事情的佔位符你真的**正在運行。在這種情況下,這就是'while'循環。 –

+0

所以,如果你正在運行'cat foo | awk',它會告訴你運行'awk

+0

恕我直言,這個工具在這裏給你提供了不好的建議,因爲bash實際上不會讓你在寫''文件的時候......';我不確定'while ... done IMSoP

回答

4

cmd是整個while cond; do ... done複合語句,在這種情況下,重定向需要來結尾:

while read -r line; do 
    echo "$line"; sleep 0.2 
done < "$1" 
+0

**很好,謝謝!**你知道'cmd'代表什麼嗎? – nath

+0

@nath命令。它還會代表什麼? :D – PSkocik

+2

cmd可以表示任何命令,如ps或netstat。如果你想在你的循環中處理這個,那麼你會執行netstat |同時讀取-r .... –

2

刪除|並有端線爲:

done < "$1" 
+1

'<「$ 1」',而是。 '''會開始heredoc。 –