Là chuyển hướng như vậy |> Chỉ là một lỗi hoặc nó có nghĩa là gì?


9

Tôi đã gõ nhầm, nhưng bash không in bất kỳ lỗi nào (nhưng đã tạo một tệp trống) vì vậy tôi nghĩ có lẽ nó thực sự có ý nghĩa gì đó? (ví dụ: ngày |> tmp.txt)


1
Bạn có chắc chắn lệnh không phải là hình thức date |> tmp.txt cmd2? Bởi vì điều đó thay đổi câu trả lời.
Konrad Rudolph

Câu trả lời:


17

Đó dường như chỉ là một đường ống dẫn trong đó phần thứ hai là một lệnh trống, chỉ chứa chuyển hướng. Viết nó như date | >filecó thể làm cho nó dễ dàng để giải thích. Lệnh rỗng không làm gì ngoài việc xử lý chuyển hướng, tạo tệp.

date >| filemặt khác sẽ hoạt động như một ghi đè cho noclobbertùy chọn shell, điều này ngăn không cho >ghi đè lên các tệp hiện có.

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

1

Có, nó sẽ không ném lỗi vì đối với bash > filecó nghĩa là chuyển hướng đến một tệp có tên file. Như trong trường hợp của bạn không có gì để chuyển hướng đến tệp, bash sẽ chỉ tạo một tên tệp filekhông có gì trong đó.

[bd@centos-6.5 my-tests]$ date | > my_file
[bd@centos-6.5 my-tests]$ cat my_file
[bd@centos-6.5 my-tests]$ 

Buồn cười. Zsh có một hành vi khác: sau lệnh, my_filechứa đầu ra của date.
NI

12
@NajibIdrissi, trong zsh, khi chỉ có các chuyển hướng và không có lệnh, sẽ zshchạy $NULLCMDlệnh ( cattheo mặc định) hoặc $READNULLCMD(một máy nhắn tin theo mặc định) nếu chỉ có các chuyển hướng đầu vào .
Stéphane Chazelas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.