
Ich schreibe ein Skript, um die Ausgabe eines Befehls in die Variablen a und b einzulesen. Dies ist das Skript
#!/bin/bash
read a b < <(awk '/Application Server/ && !seen[$7]++{printf "%s ", $7}' /tmp/ServerState)
echo "The value of a is $a"
echo "The value of b is $b"
und erhalte den Syntaxfehler:
line 3: syntax error near unexpected token `<'
line 3: `read a b < <(awk /Application Server/ && !seen[$7]++{echo "%s ", $7} /tmp/ServerState)'
Aber wenn ich denselben Befehl in die Konsole eingebe, funktioniert es bei mir ohne Probleme.
app@user:/tmp> read a b < <(awk '/Application Server/ && !seen[$7]++{printf "%s ", $7}' /tmp/ServerState)
app@user:/tmp> echo $a
FAILED
app@user:/tmp> echo $b
STARTED
Ich bin für jede Hilfe sehr dankbar.
Antwort1
sh
(das in den meisten (von Debian abgeleiteten) Systemen mit verknüpft ist dash
) erlaubt nichtProzesssubstitution. Versuchen Sie den Aufruf mit bash script.sh
. Derselbe Aufruf mit ./script.sh wird ausgeführt, sha-bang
wobei/bin/bash
in Ihrem Skript.
Antwort2
Ich habe versucht, das Skript als sh file.sh aufzurufen und habe den Fehler erhalten. Aber als ich dasselbe Skript als ./file.sh und bash file.sh aufgerufen habe, funktionierte es und lieferte das gewünschte Ergebnis.