
Angenommen, ich habe ein Bash-Shell-Skript, Myscript.sh
das aufgerufen wird und ein Argument als Eingabe benötigt.
Ich möchte aber, dass der Inhalt der aufgerufenen Textdatei text.txt
dieses Argument ist.
Ich habe dies versucht, aber es funktioniert nicht:
cat text.txt | ./Myscript.sh
Gibt es eine Möglichkeit, dies zu tun?
Antwort1
./Myscript.sh "$(cat text.txt)"
Antwort2
Sie können die Pipe-Ausgabe als Shell-Skriptargument verwenden.
Versuchen Sie diese Methode:
cat text.txt | xargs -I {} ./Myscript.sh {}
Antwort3
Um @bac0n zu vervollständigen, der meiner Meinung nach der Einzige ist, der die Frage richtig beantwortet, hier eine kurze Zeile, die Ihrer Liste der Skriptargumente die weitergeleiteten Argumente voranstellt:
#!/bin/bash
declare -a A=("$@")
[[ -p /dev/stdin ]] && { \
mapfile -t -O ${#A[@]} A; set -- "${A[@]}"; \
}
echo "$@"
Anwendungsbeispiel:
$ ./script.sh arg1 arg2 arg3
> arg1 arg2 arg3
$ echo "piped1 piped2 piped3" | ./script.sh
> piped1 piped2 piped3
$ echo "piped1 piped2 piped3" | ./script.sh arg1 arg2 arg3
> piped1 piped2 piped3 arg1 arg2 arg3