Apakah pengalihan seperti "|>" hanya kesalahan atau itu berarti sesuatu?

9

Saya mengetiknya secara tidak sengaja tetapi bash tidak mencetak kesalahan (tetapi membuat file kosong) jadi saya pikir mungkin itu benar-benar berarti sesuatu? (misalnya tanggal |> tmp.txt)

Bdimych2 Bdimych2
sumber
1
Apakah Anda yakin perintahnya bukan dari formulir date |> tmp.txt cmd2? Karena itu mengubah jawabannya.
Konrad Rudolph

Jawaban:

17

Itu tampaknya hanya pipa di mana bagian kedua adalah perintah kosong, hanya berisi pengalihan. Menulisnya sebagai date | >filemungkin membuatnya lebih mudah untuk ditafsirkan. Perintah kosong tidak melakukan apa-apa selain memproses pengalihan, membuat file.

date >| filedi sisi lain akan bertindak sebagai ganti untuk noclobberopsi shell, yang mencegah biasa >menimpa file yang ada.

$ touch foo; set -o noclobber
$ date > foo
bash: foo: cannot overwrite existing file
$ date >| foo       # works
ilkkachu
sumber
1

Ya, itu tidak akan membuang kesalahan karena untuk bash > fileberarti mengarahkan ke file bernama file. Seperti dalam kasus Anda, tidak ada yang diarahkan ke file, bash hanya akan membuat nama file filetanpa apa pun di dalamnya.

[bd@centos-6.5 my-tests]$ date | > my_file
[bd@centos-6.5 my-tests]$ cat my_file
[bd@centos-6.5 my-tests]$ 
Bhagyesh Dudhediya
sumber
Lucu. Zsh memiliki perilaku yang berbeda: setelah perintah, my_fileberisi output dari date.
NI
12
@NajibIdrissi, dalam zsh, ketika hanya ada pengalihan dan tidak ada perintah, zshjalankan $NULLCMDperintah ( catsecara default) atau $READNULLCMD(pager secara default) jika hanya ada pengalihan input .
Stéphane Chazelas