szintaktikai hiba váratlan token közelében

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

  • Nem tudom ezt a viselkedést szkriptből reprodukálni. Hogyan hívod a forgatókönyvet? A következő néven hívom: $ ./script.sh
  • @Ketan sh script.sh néven hívom. Most próbáltam meg a ./script.sh fájlt, és ez a vágy eredményét adja. A értéke sikertelen A b értéke KEZDŐDIK. Nagyon köszönöm a választ … Csak szeretném tudni, miért különbözik, miközben ugyanazt a szkriptet futtatja az sh file.sh és ./file.sh használatával?
  • Tegyük fel, hogy 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, a sha-bang kóddal hajtja végre, amely a bin / ** / bash ** a szkriptben.
  • @SudevJash lásd: Mi a különbség a ./ és az sh között egy szkript futtatásához?
  • @Costas Igen, ez még akkor is jól működik bash script.sh és megkapom a kívánt kimenetet … Nagyon köszönöm …

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. Pontosan dash. 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 a bash. 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ént file.sh vagy ./file.sh néven (lásd: saját válaszuk )

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük