Jaka jest poprawna nazwa dla polecenia „>”

38

Próbowałem znaleźć sposób przekazania tekstu do pliku bez nadpisywania tego, co już tam jest za pomocą >polecenia i zdałem sobie sprawę, że nie wiem, jak się nazywa. Szukając prawej strzałki lub prawej Chevron lub więcej niż polecenia nie wykazały niczego. Zawsze tylko to nazywałem pass .

blarg
źródło

Odpowiedzi:

53

>nie jest poleceniem, ale przekierowaniem deskryptora pliku. Oznacza to, że powłoka analizuje to przypisanie, usuwa je z wiersza poleceń i zmienia środowisko dla nowego procesu, w którym zostało uruchomione. Nowy proces nie zauważa tej części wiersza polecenia. Dlatego możesz umieścić to wszędzie: na początku, na końcu lub pomiędzy.

Poszukaj REDIRECTIONbloku w man bash.

Aby dołączyć do istniejącego pliku, musisz go użyć >>.

Hauke ​​Laging
źródło
Jeśli opcja noclobberjest ustawiona, >|zastąpi i pozwoli na spychanie pliku.
bsd
30

>jest operatorem przekierowania . Zauważ, że użycie >przekierowania do zwykłego pliku zastąpi to, co już tam jest, chyba że ustawiony jest noclobber . >>dołącza się na końcu pliku.

Josh Jolly
źródło
I nie zastępuje, jeśli noclobberzostało ustawione (bash).
Hauke ​​Laging
Zaktualizowałem moją odpowiedź, dziękuję za wyjaśnienia.
Josh Jolly,
5
@HaukeLaging noclobberto nie tylko bzdury. Jest częścią POSIX
kojiro,
6

Jak odpowiedzieli inni ludzie, >nie jest to polecenie, ale operator przekierowania. Jednak termin „operator przekierowania” nie odnosi się konkretnie do >, lecz szeregu różnych możliwych operatorów przekierowania. Te dashwykazy strona człowiek odpowiednio następujące operatory przekierowania:

 < > >| << >> <& >& <<- <>

Nie jestem pewien, czy dla każdego istnieje poprawna indywidualna nazwa. Może po przejrzeniu starych instrukcji obsługi powłoki znajdziesz coś interesującego. To źródło , poprawne lub niepoprawne, z pewnością ma nazwę kilku z nich:

>  - 'output redirection operator'
<  - 'input redirection operator'
>> - 'output append operator'

Ale również:

2> - 'standard error redirection operator'

Nie sądzę jednak, aby było to naprawdę poprawne, ponieważ 2jest to technicznie argument, a nie część operatora.

Krótki przegląd (w przypadku, gdy nie rozpoznajesz żadnego z powyższych):

>   - redirect output stream to a file, eg >somefile (for stdout) or 2>somefile
>|  - as above but overwrite the file even if the noclobber shell option is set
>>  - append output stream to file
<   - redirect input stream from file, n defaults to 0 for stdin
<>  - open file for reading and writing on stdin
>&  - redirect output stream to another stream (eg >&1) or close with - (eg 2>&-)
<<  - here document - see http://en.wikipedia.org/wiki/Here_document
<<- - here document with leading tabs removed.

W bashtobie także:

<<< - here string, a one line here file. Eg <<<"foo bar"
Graeme
źródło
Bardzo ładna szybka lista referencyjna, ale nie <<-usuwa wiodących tabulatorów i spacji?
iconoclast
@iconoclast, nie, zdecydowanie tylko karty.
Graeme
0

> przekierowuje dane wyjściowe do pliku (lub urządzenia), zastępując wszystko, co już tam istnieje

>> przekierowuje wyjście do pliku (lub urządzenia) dołączając do wszystkiego, co już tam istnieje

< przekierowuje dane z pliku (lub urządzenia) do programu lub urządzenia

<< tutaj dokument

les
źródło
1
<<jest tutaj dokument
Graeme,
1
@ Graeme Zredagowałem swoją odpowiedź. Dziękuję za pomoc
les