2013-08-30 24 views
11

Jest komenda nie rozumiem:Co to jest EOF !! w skrypcie basha?

custom_command << EOF!! 

Chcę zapytać, co EOF !! znajduje się w skrypcie basha. Znalazłem EOF z google, ale Google ignoruje "!!" automatycznie, więc nie mogę znaleźć EOF !!.

Znam koniec pliku, ale nie wiem dokładnie, co to znaczy "!!" w skrypcie. Czy to znak, aby wymusić coś, co można zrobić, jak w vim wq! ?

Plus, dlaczego i kiedy powinniśmy używać EOF !! zamiast EOF?

+0

To jest "Koniec pliku" – Juangcg

+2

http: //webapps.stackexchange.com/q/1479; nie, że ci to pomoże ... – Ben

+1

[Heredoc] (http://en.wikipedia.org/wiki/Here_document)! – devnull

Odpowiedz

15

W linii poleceń, !! zostanie rozwinięte do ostatniego wykonanego polecenia. Bash zostanie wydrukowany wiersz dla Ciebie:

$ ls 
a.txt b.txt 
$ cat <<EOF!! 
cat <<EOFls 
> 

W skrypcie, choć interpretacja historii jest domyślnie wyłączone, więc wykrzykniki są częścią słowa.

#! /bin/bash 
ls 
cat <<EOF!! 
echo 1 
EOFls 
echo 2 

Produkuje:

a.txt b.txt 
script.sh: line 7: warning: here-document at line 3 delimited by end-of-file (wanted `EOF!!') 
echo 1 
EOFls 
echo 2 

Aby włączyć historię i interpretację historii w skrypcie, należy dodać następujące wiersze:

set -o history 
set -H 
4

Możesz użyć dowolnego ciągu jak tutaj terminator dokumentu.

EOF!! to właśnie to, co postanowił wykorzystać osoba pisząca scenariusz.

+0

Nie, w bash 'EOF !!' zostanie zastąpiony przez 'EOF ' – knittl

+2

@knittl Nie będzie, '!!' jest zastępowane tylko w skryptach interaktywnych. – jlliagre

+1

W prawo. Rozszerzenie historii nie jest domyślnie włączone w trybie nieinteraktywnym. +1. – devnull

0

Jak inni już napisali, to tutaj-dokument.

Token używany do tego powinien zostać wybrany starannie; ponieważ prawdopodobieństwo, że dokument tutaj zawiera EOF!!, jest niższe niż dla samej EOF, oni to wybrali.

Przypuszczam, że sprawdzili, czy nie szkodzi przed użyciem; !! w skrypcie NIE odnosi się do historii, ale pozostaje taka jaka jest.

1

To prawdopodobnie po prostu dziwne heredoc.

Przykład:

cat << EOF!! 
blabla 
EOF!! 

Uwaga: to działa tylko w skryptach. Parser wiersza poleceń interpretuje !!.