2017-07-23 3 views
0

Ich schrieb ein Skript, einschließlich dieser Schleife:Bash-Skript - mit cmd statt Katze

#!/bin/bash 

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

A shellcheck läuft die folgende Meldung ausgegeben:

SC2002: Useless Katze. Betrachte 'cmd < Datei | .. 'oder' cmd Datei | ..' stattdessen.

änderte ich das Skript:

#!/bin/bash 

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

aber jetzt bash Ausfahrten mit:

cmd: Befehl nicht

gefunden

, was ich falsch gemacht habe?

+4

'cmd' ist ein Platzhalter für die Sache du liegst ** wirklich **. In diesem Fall ist das die while-Schleife. –

+0

Also, wenn du 'cat foo | awk "würde es dir sagen, dass du" awk

+0

IMHO das Tool gibt Ihnen hier schlechte Ratschläge, weil Bash Sie nicht tatsächlich schreiben lassen kann IMSoP

Antwort

4

Ihre cmd die ganze while cond; do ... done Compound-Anweisung ist und in diesem Fall muss die Umleitung am Ende kommen:

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

** schön, danke! ** weißt du, wofür 'cmd' steht? – nath

+0

@nath Befehl. Wofür würde es sonst stehen? : D – PSkocik

+2

cmd kann jeden Befehl wie ps oder netstat bedeuten. Wenn Sie dies in Ihrer Schleife verarbeiten wollten, würden Sie netstat | während lesen -r .... –

2

Entfernen Sie die | und haben die Endlinie wie:

done < "$1" 
+1

'<" $ 1 "', eher. '<<' würde ein Heredoc beginnen. –