2013-04-11 19 views
31

patrząc na magicznych instalatorów, które występują na wszystkich rodzajach projektów (na przykład do RVM) będziesz zawsze zobaczyć polecenia jak: curl ... | bash ... po co to jest?

\curl ... | bash 

przykład

\curl -L https://get.rvm.io | bash -s stable 

Zastanawiam się, dlaczego te polecenia zaczynają się od ukośnika - bez nich działają bez zarzutu.

Wszelkie sugestie?

+1

Gdzie jest duplikat? –

Odpowiedz

54

Służy do wywoływania polecenia "original", unikając jego wywoływania z ewentualnymi aliasami. Oznacza to, że wyłącza możliwe aliasy na komendzie curl i dostosowuje się do oryginalnego.

Jeśli masz

alias grep='grep --color=auto' 

a następnie zrobić grep, będzie musiał kolory. Więc jeśli nie chcesz kolorów, po prostu napisz \grep.

+5

Dzięki ...proste, gdy go znasz, ale niemożliwe do znalezienia przez Google;) – pagid

+2

będzie wywoływać TYLKO oryginalne polecenie, jeśli nie ma funkcji o tej samej nazwie. Proszę zobaczyć moją odpowiedź na alias/funkcję/kolejność poleceń oceny przez bash (W skrócie: '\ coś': uniknie tylko aliasu, ale nie ominie funkcji.' Polecenie coś': pominie alias ORAZ funkcja i uruchom polecenie "coś") –

+0

To jest interesujący punkt, @OlivierDulac. Znalazłem kilka opcji w pokrewnym poście: http://stackoverflow.com/q/6162903/1983854. Po twoim przykładzie, tak, '\ coś' po prostu pomija alias, a nie możliwe funkcje o tej nazwie. Aby to zrobić, '$ (które polecenie)', '" polecenie "', może działać. – fedorqui

20

to backsleshem

to, aby uruchomić polecenie zaczynające się od tej nazwy (lub funkcji), ale nie aliasu.

Aby upewnić się ominąć zarówno funkcja I alias:

command somecommand 

na ominięcie tylko alias (a więc uruchomić funkcję, lub jeśli nie ma funkcji, poleceń):

\somecommand 

Zobaczmy, które ma pierwszeństwo nad którym (używam bash 2.05b ... ymmv)

będę zdefiniować funkcję i alias o tej samej nazwie co komendzie (LS):

$ alias ls='echo A' 
$ function ls { echo B ; } 

Używanie "typ -Wszystkie ls" pokazuje kolejność oceny:

$ type -all ls 
ls is aliased to `echo A' 
ls is a function 
ls() 
{ 
    echo B 
} 
ls is /usr/bin/ls 

Ale możemy dowiedzieć się również, próbując je:

$ ls 
A 
$ \ls 
B 
$ command ls 
file1 file2 file3 

wydaje się więc kolejność pierwszeństwa jest: alias -before- funkcja-przed-polecenie podjęte na ścieżce.

Oczywiście, jeśli precyzyjne względna/bezwzględna ścieżka, to jest wtedy zmuszony do komendy wskazał:

$ /usr/bin/ls 
file1 file2 file3 
+0

uwaga: kolejność, o której mówię, jest w bashu (i również polecenie "command"). Zauważyłem, że różni się w innych muszlach! –

+3

A dzisiaj dowiedziałem się o słowie kluczowym "command". Po prawie 2 dekadach korzystania z powłoki Unix/Linux. – Perleone

+0

@Perleone: zawsze jest coś nowego do odkrycia lub stworzenia, i dlatego to uwielbiamy^^ –

2

Pomija ewentualnego alias curl.