2013-04-16 28 views
11

ich diesen FehlerRedirector "<<<" in Ubuntu?

Syntax error: redirection unexpected

in der Zeile:

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

Wie kann ich dies in Ubuntu laufen?

+2

Ist keine Umleitung einer einzelnen, linken Klammer? < –

+0

Der Code geht von links nach rechts. Eine Weile her, aber wenn ich mich richtig erinnere, ist es '>>" $ RESULT "', um es umzuleiten. –

+1

Was möchten Sie mit diesem Befehl erreichen? Was ist der Wert von $ RESULT? –

Antwort

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

ist eine Bash-spezifische Sache. Wenn Sie eine andere bourne-kompatible Shell verwenden, versuchen Sie Folgendes:

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

gelöst, danke! – jmginer

+0

Danke @Hal Das hat mein Problem auch gelöst .. –

2

Es funktioniert für mich auf Ubuntu, wenn ich Sie IF-Block ausführen:

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

Was macht <<

+3

Es leitet [hier-Strings] (http://linux.die.net/abs-guide/x15683.html) um. –

+0

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

21

<<< ist ein bash-spezifische Umleitungsoperator. Die documentation bezieht sich darauf als "Here String", eine Variante der "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.

Ein einfaches Beispiel:

$ cat <<< hello 
hello 

Wenn Sie einen Fehler finden fühlt, ist es wahrscheinlich, dass Sie den Befehl mit einem Shell anders als bash sind ausführen. Wenn Sie oben im Skript #!/bin/sh haben, versuchen Sie, es in #!/bin/bash zu ändern.

Wenn Sie versuchen, es zu verwenden, um mit /bin/sh, nimmt es wahrscheinlich die << zu einem „hier Dokument“ bezeichnet und sieht dann ein unerwartetes < danach, in der resultierenden „Syntaxfehler: Umleitung unerwartet“ Nachricht, die du bist Sehen.

zsh und ksh unterstützen auch diese Syntax.

+0

ksh unterstützt es. Strich nicht. –

+0

Wäre es richtig zu sagen, es ist eine Kurzschrift für 'cat <(echo" hallo ")'? (Ich frage nur, um mein Verständnis zu vertiefen) –

+1

@ Sridhar-Sarnobat: Nicht ganz. 'cat <<< hallo' ruft 'cat' ohne Argumente auf, wobei stdin von einer temporären Datei umgeleitet wird, die' hallo' gefolgt von einem Zeilenumbruch enthält. 'cat <(echo hallo)' ruft 'cat' mit einem einzigen Argument auf, welches der Name einer Pseudodatei ist, aus der die gleichen Daten gelesen werden können. 'cat' verhält sich ähnlich, ohne dass Argumente und stdin umadressiert werden, oder mit einem einzigen Argument, das eine Datei zum Lesen angibt, aber andere Befehle können sich anders verhalten. Zum Beispiel listet auf meinem System 'ls -l/proc/self/fd/0 <<< hallo' einen symbolischen Link zur temporären Datei auf, und' echo <(echo hallo) 'druckt'/dev/fd/63'. –