2013-04-16 34 views
11

dostaję ten błądRedirector "<<<" w Ubuntu?

Syntax error: redirection unexpected

w linii:

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

Jak mogę uruchomić to w Ubuntu?

+2

Czy przekierowanie nie jest pojedynczym, lewym wspornikiem kątowym? < –

+0

Kod przechodzi od lewej do prawej. Minęło trochę czasu, ale jeśli dobrze pamiętam, to '>>" $ WYNIK "', aby go przekierować. –

+1

Co chcesz osiągnąć za pomocą tego polecenia? Jaka jest wartość "$ WYNIK"? –

Odpowiedz

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

jest rzeczą charakterystyczną dla gry Bash. Jeśli używasz innej powłoki kompatybilnej z firmą Bourne, spróbuj:

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

rozwiązany, dzięki! – jmginer

+0

Dzięki @Hal To również rozwiązało mój problem .. –

2

To działa dla mnie na Ubuntu, jeśli skończę, jeśli blok:

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

Co robi <<

+3

Przekierowuje [ciągi-znaków] (http://linux.die.net/abs-guide/x15683.html). –

+0

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

21

<<< jest operatorem przekierowania bash specyficzne. documentation odnosi się do niego jako "tutaj ciąg", wariant "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.

Prosty przykład:

$ cat <<< hello 
hello 

Jeśli otrzymujesz błąd, to jest prawdopodobne, że jesteś wykonywania polecenia za pomocą powłoki innej niż bash. Jeśli masz numer #!/bin/sh u góry skryptu, spróbuj zmienić go na #!/bin/bash.

Jeśli spróbujesz użyć go /bin/sh, to prawdopodobnie zakłada << odnosi się do „dokumentu tutaj”, a następnie widzi nieoczekiwany < potem, w wyniku czego „błąd składni: przekierowanie nieoczekiwane” wiadomość, że jesteś widzenie.

zsh i ksh również obsługują tę składnię.

+0

ksh obsługuje to. myślnik nie. –

+0

Czy można powiedzieć, że jest skrótem dla 'cat <(echo" hello ")'? (Chcę tylko pogłębić moje zrozumienie) –

+1

@ Sridhar-Sarnobat: Niezupełnie. 'cat <<< hello' wywołuje' cat' bez argumentów, ze stdin przekierowany z pliku tymczasowego zawierającego 'hello', po którym następuje znak nowej linii. 'cat <(echo hello)' wywołuje 'cat' z pojedynczym argumentem, który jest nazwą pseudo-pliku, z którego może odczytać te same dane. 'cat' zachowuje się podobnie bez żadnych argumentów i stdin przekierowanych vs. z pojedynczym argumentem nazywania pliku do odczytania, ale inne polecenia mogą zachowywać się inaczej. Na przykład w moim systemie 'ls -l/proc/self/fd/0 <<< hello' wyświetla dowiązanie symboliczne do pliku tymczasowego, a' echo <(echo hello) 'wypisuje'/dev/fd/63'. –