vagyok parancsfájl írása a parancs kimenetének az a és b változó beolvasására. Ez a szkript
#!/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"
és a szintaxishiba a következő:
line 3: syntax error near unexpected token `<" line 3: `read a b < <(awk /Application Server/ && !seen[$7]++{echo "%s ", $7} /tmp/ServerState)"
De amikor ugyanazt a parancsot gépelem be a konzolba, minden gond nélkül nekem működik.
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
Minden segítséget nagyon értékelünk.
Megjegyzések
Válasz
sh (amely a legtöbb (Debian-származtatott) rendszerben dash -hez van kapcsolva) nem engedi meg a folyamat helyettesítését . Próbálja meg meghívni a következővel: bash script.sh. Ugyanaz a hívás a “>
/bin/bash a szkriptben.
Megjegyzések
- @MichaelDurrant Ah, módosításod most az ellenkezőjét jelenti annak, amit mondani akartam.
- @muru nem tudom elfogadni a módosítást ' t o
bash. Pontosandash.file $(which sh)output/bin/sh: symbolic link to 'dash' - Costas, hogy ' amit én jelentett. Michael Durrant megváltoztatta a szerkesztésemet, a
dashhelyett abash. Köszönjük, hogy kijavította. - A folyamat helyettesítésére (
<( echo foo )) gondolsz, nem pedig a parancs behelyettesítésére ($(echo foo)) (amely a POSIX specifikáció része). - @chepner Igazad van. Köszönöm a megjegyzést. Javítva.
Válasz
Próbáltam a szkriptet sh file.sh néven meghívni, és a hibát kaptam . De amikor ugyanazt a szkriptet hívtam meg, mint a ./file.sh és a bash file.sh, az működik, és megadja a kívánt eredményt.
Válasz
Ezenkívül egyszerűen hozzáadhatja a szkript tetejére a sort:
#!/bin/bash
A terminálnak / konzolnak utasítja, hogy bash szkriptként hajtsa végre a szkriptet, és a “<( cmd )” folyamathelyettesítés rendben fog működni. / p>
Hozzászólások
- Ne feledje, hogy az OP ' szkript már tartalmazta ezt a shebangot, de az OP futott
sh file.sh-kéntfile.shvagy./file.shnéven (lásd: saját válaszuk )
$ ./script.shshdon ' ne engedje meg a parancs behelyettesítését. Próbálkozzon a következővel:bash script.sh. Ugyanaz a hívás, amelyet./script.shhív, asha-bangkóddal hajtja végre, amely a bin / ** / bash ** a szkriptben.