Kann ich die Pipe-Ausgabe als Shell-Skriptargument verwenden?

26075
Narin

Angenommen, ich habe ein bash-Shell-Skript, Myscript.shdas ein Argument als Eingabe benötigt.

Aber ich möchte, dass der Inhalt der aufgerufenen Textdatei text.txtdieses Argument ist.

Ich habe es versucht, aber es funktioniert nicht:

cat text.txt | ./Myscript.sh 

Gibt es eine Möglichkeit, dies zu tun?

18

5 Antworten auf die Frage

22
Ignacio Vazquez-Abrams

Kommandosubstitution .

./Myscript.sh "$(cat text.txt)" 
13
zzart

Sie können die Pipe-Ausgabe als Shell-Skriptargument verwenden.

Versuchen Sie diese Methode:

cat text.txt | xargs -I {} ./Myscript.sh {} 
1
reinierpost

Wenn Sie mehr als einen Befehl in der Datei haben, sollten Sie xargs oder parallel verwenden, z

xargs -d '\n' Myscript.sh < text.txt parallel -j4 Myscript.sh < text.txt 
0
Ranjithkumar T

Versuchen,

 $ cat comli.txt date who screen wget  $ cat comli.sh #!/bin/bash which $1  $ for i in `cat comli.txt` ; do ./comli.sh $i ; done 

so können Sie die Werte eins nach dem anderen eingeben comli.shaus comli.txt.

0
al-ash

Prozessersetzung

./Myscript.sh <(cat text.txt) 

Siehe zB https://www.gnu.org/software/bash/manual/bash.html#Process-Substitution