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
dash
helyett 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.sh
vagy./file.sh
néven (lásd: saját válaszuk )
$ ./script.sh
sh
don ' 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.sh
hív, asha-bang
kóddal hajtja végre, amely a bin / ** / bash ** a szkriptben.