2013-04-16 11 views
11

che sto ricevendo questo erroreRedirector "<<<" in Ubuntu?

Syntax error: redirection unexpected

nella linea:

if grep -q "^127.0.0." <<< "$RESULT" 

Come posso fare funzionare questo in Ubuntu?

+2

Non è il reindirizzamento una singola parentesi angolare sinistra? < –

+0

Il codice va da sinistra a destra. È passato un po 'di tempo, ma se ricordo che è corretto è '>>" $ RISULTATO "' per reindirizzare. –

+1

Cosa vuoi ottenere con quel comando? Qual è il valore di '$ RISULTATO'? –

risposta

17
if grep -q "^127.0.0." <<< "$RESULT" 
then 
    echo IF-THEN 
fi 

è una cosa specifica di Bash. Se si utilizza una shell compatibile bourne diversa, provare:

if echo "$RESULT" | grep -q "^127.0.0." 
then 
    echo IF-THEN 
fi 
+1

risolto, grazie! – jmginer

+0

Grazie @Hal Questo ha risolto anche il mio problema .. –

2

Funziona per me su Ubuntu, se io completo blocco IF:

if grep -q "^127.0.0." <<< "$RESULT"; then echo ""; fi 
+0

Cosa fa <<< fare? Questo potrebbe essere qualcosa di nuovo per me. –

+3

Reindirizza [here-string] (http://linux.die.net/abs-guide/x15683.html). –

+0

http://stackoverflow.com/questions/2462317/bash-syntax-error-redirection-unexpected – jmginer

21

<<< è un operatore di reindirizzamento specifici bash. Lo documentation si riferisce ad esso come "Here String", una variante di "Here Document".

3.6.7 Here Strings

A variant of here documents, the format is:

<<< word

The word is expanded and supplied to the command on its standard input.

Un semplice esempio:

$ cat <<< hello 
hello 

Se stai ricevendo un errore, è probabile che si sta eseguendo il comando utilizzando una shell diversa da bash. Se hai #!/bin/sh nella parte superiore del tuo script, prova a cambiarlo in #!/bin/bash.

Se si tenta di utilizzare con /bin/sh, probabilmente assume il << si riferisce ad un "here document", e poi vede un inaspettato < dopo che, con la conseguente "Errore di sintassi: reindirizzamento inaspettato" il messaggio che sei vedendo.

zsh e ksh supportano anche questa sintassi.

+0

ksh lo supporta. il trattino no. –

+0

Sarebbe corretto dire che è una scorciatoia per 'cat <(echo" hello ")'? (Sto solo chiedendo di approfondire la mia comprensione) –

+1

@ Sridhar-Sarnobat: Non del tutto. 'cat <<< hello' invoca' cat' senza argomenti, con stdin reindirizzato da un file temporaneo contenente 'hello' seguito da una nuova riga. 'cat <(echo hello)' invoca 'cat' con un singolo argomento, che è il nome di uno pseudo file dal quale può leggere gli stessi dati. 'cat' si comporta in modo simile senza argomenti e lo stdin viene reindirizzato rispetto a un singolo argomento che nomina un file da leggere, ma altri comandi possono comportarsi diversamente. Per esempio, sul mio sistema 'ls -l/proc/self/fd/0 <<< hello' elenca un link simbolico al file temporaneo, e' echo <(echo hello) 'stampa'/dev/fd/63'. –