Apa nama yang benar untuk perintah ">"

38

Saya mencoba menemukan cara untuk mengirimkan beberapa teks ke file tanpa menimpa apa yang sudah ada menggunakan >perintah dan saya menyadari saya tidak tahu apa namanya. Mencari panah kanan atau chevron kanan atau lebih dari perintah tidak muncul apa-apa. Saya selalu menyebutnya lulus .

blarg
sumber

Jawaban:

53

>bukan perintah tetapi pengalihan file deskriptor. Ini berarti bahwa shell mem-parsing penugasan ini, menghapusnya dari baris perintah dan mengubah lingkungan untuk proses baru di mana ia dimulai. Proses baru tidak melihat bagian baris perintah ini. Itulah alasan mengapa Anda bisa meletakkannya di mana-mana: Di awal, di akhir atau di antaranya.

Cari REDIRECTIONbloknya man bash.

Untuk menambahkan file yang ada, Anda harus menggunakan >>.

Hauke ​​Laging
sumber
Jika opsi noclobberini diset, maka >|akan menimpa dan memungkinkan clobber file.
bsd
30

>adalah operator pengalihan . Perhatikan bahwa menggunakan >untuk mengarahkan ulang ke file biasa akan menimpa apa yang sudah ada, kecuali noclobber diatur. >>akan ditambahkan ke akhir file.

Josh Jolly
sumber
Dan itu tidak menimpa jika noclobbertelah disetel (bash).
Hauke ​​Laging
Memperbarui jawaban saya, terima kasih atas klarifikasi.
Josh Jolly
5
@ HaukeLaging noclobberbukan hanya bashism. Itu bagian dari POSIX
kojiro
6

Seperti yang dijawab orang lain, >ini bukan perintah, melainkan operator pengalihan. Namun, istilah 'operator pengalihan' tidak secara khusus merujuk pada >, tetapi sejumlah operator pengalihan yang berbeda. The dashdaftar halaman manual berikut sebagai operator redirection:

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

Saya tidak yakin ada nama individu yang valid untuk masing-masing nama. Mungkin jika Anda menggali beberapa manual shell lama Anda akan menemukan sesuatu yang menarik. Sumber ini , benar atau salah, tentu memiliki penamaan beberapa di antaranya:

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

Tetapi juga:

2> - 'standard error redirection operator'

Namun saya tidak berpikir ini benar karena 2secara teknis argumen dan bukan bagian dari operator.

Referensi cepat (jika Anda tidak mengenali yang di atas):

>   - 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.

Dalam bashAnda juga memiliki:

<<< - here string, a one line here file. Eg <<<"foo bar"
Graeme
sumber
Daftar referensi cepat yang sangat bagus, tetapi tidak <<-menghapus tab dan spasi utama?
iconoclast
@iconoclast, tidak, pasti hanya tab.
Graeme
0

> mengalihkan output ke file (atau perangkat) menimpa apa pun yang sudah ada di sana

>> mengalihkan output ke file (atau perangkat) yang ditambahkan ke apa pun yang sudah ada di sana

< mengarahkan data dari file (atau perangkat) ke program atau perangkat

<< dokumen di sini

les
sumber
1
<<adalah dokumen di sini
Graeme
1
@ Graeme Saya mengedit jawaban saya. Terima kasih atas bantuannya
les