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
dashconbash. 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.shanzichéfile.sho./file.sh(vedi la propria risposta )
$ ./script.shshdon ' t consentire la sostituzione del comando. Prova a richiamare conbash script.sh. La stessa chiamata di./script.shviene eseguita consha-bangche è / bin / ** bash ** nel tuo script.