olen komentosarjan kirjoittaminen komennon tuloksen lukemiseksi muuttujiin a ja b. Tämä on komentosarja
#!/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"
ja syntaksivirhe:
line 3: syntax error near unexpected token `<" line 3: `read a b < <(awk /Application Server/ && !seen[$7]++{echo "%s ", $7} /tmp/ServerState)"
Mutta kun kirjoitan saman komennon konsoliin, se toimii minulle ilman ongelmia.
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
Kaikki tähän liittyvä apu on todella arvostettua.
Kommentit
Vastaa
sh
(joka useimmissa (Debianista johdetuissa) järjestelmissä on linkitetty dash
) ei salli prosessin korvaamista . Yritä kutsua bash script.sh
. Sama kutsu ./script.sh suorittaa parametrilla sha-bang
, joka on /bin/bash
komentosarjassa.
Kommentit
- @MichaelDurrant Ah, muokkauksesi tarkoittaa nyt päinvastaista kuin mitä tarkoitin sanoa.
- @muru En voi ' hyväksyä muutosta t o
bash
. Tarkoitan tarkalleendash
.file $(which sh)
tuotos/bin/sh: symbolic link to 'dash'
- Costas, että ' s mitä minä tarkoitti. Michael Durrant muutti muokkaukseni korvaamaan
dash
sanallabash
. Kiitos, että korjait sen. - Tarkoitat prosessin korvaamista (
<( echo foo )
), ei komentojen korvaamista ($(echo foo)
) (joka on osa POSIX-määritystä). - @chepner Olet oikeassa. Kiitos kommentista. Korjattu.
Vastaa
Yritin kutsua komentosarjaa nimellä sh file.sh ja sain virheen . Mutta kun vedoin saman komentosarjan kuin ./file.sh ja bash file.sh, se toimii ja antaa halutun tuloksen.
vastaus
Lisäksi voit yksinkertaisesti lisätä rivin palavan komentosarjan yläosaan:
#!/bin/bash
Se käskee päätelaitteesi / konsolisi suorittamaan komentosarjan bash-skriptinä, ja prosessin korvaaminen ”<( cmd )
” toimii hyvin.
Kommentit
- Huomaa, että OP ' -komentosarjassa oli jo tämä shebang, mutta OP oli käynnissä se nimellä
sh file.sh
file.sh
tai./file.sh
(katso omat vastauksensa )
$ ./script.sh
sh
älä ' salli komennon korvaamista. Yritä käynnistääbash script.sh
../script.sh
-soittajan suorittama sama kutsu suoritetaansha-bang
-koodilla, joka on komentosarjassa / bin / ** bash **.