Sono scrivere uno script per leggere loutput di un comando nella variabile a e b. Questo è lo script
#!/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"
e ottiene lerrore di sintassi come:
line 3: syntax error near unexpected token `<" line 3: `read a b < <(awk /Application Server/ && !seen[$7]++{echo "%s ", $7} /tmp/ServerState)"
Ma quando digito lo stesso comando nella console funziona senza problemi.
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
Qualsiasi aiuto su questo è davvero apprezzato.
Commenti
Risposta
sh
(che nella maggior parte dei sistemi (derivati da Debian) è collegato a dash
) non “consente la sostituzione del processo . Prova a invocare con bash script.sh
. La stessa chiamata di ./script.sh viene eseguita con sha-bang
che è /bin/bash
nel tuo script.
Commenti
- @MichaelDurrant Ah, la tua modifica ora significa lopposto di quello che volevo dire.
- @muru Non posso ' accettare la modifica t o
bash
. Intendo esattamentedash
.file $(which sh)
output/bin/sh: symbolic link to 'dash'
- Costas, questo ' è quello che ho significava. Michael Durrant ha cambiato la mia modifica per sostituire
dash
conbash
. Grazie per aver risolto il problema. - Intendi la sostituzione del processo (
<( echo foo )
), non la sostituzione del comando ($(echo foo)
) (che fa parte della specifica POSIX). - @chepner Hai ragione. Grazie per il commento. Riparato.
Risposta
Stavo cercando di richiamare lo script come sh file.sh e ho ricevuto lerrore . Ma quando ho invocato lo stesso script di ./file.sh e bash file.sh funziona e dà il risultato desiderato.
Risposta
Inoltre, puoi semplicemente aggiungere la riga sotto nella parte superiore dello script:
#!/bin/bash
Indica al tuo terminale / console di eseguire lo script come script bash, e la sostituzione del tuo processo “<( cmd )
” funzionerà bene.
Commenti
- Nota che lo script dellOP ' aveva già quello shebang, ma lOP era in esecuzione come
sh file.sh
anzichéfile.sh
o./file.sh
(vedi la propria risposta )
$ ./script.sh
sh
don ' t consentire la sostituzione del comando. Prova a richiamare conbash script.sh
. La stessa chiamata di./script.sh
viene eseguita consha-bang
che è / bin / ** bash ** nel tuo script.