Czy takie przekierowanie „|>” jest tylko błędem, czy może coś znaczy?

9

Napisałem go przez pomyłkę, ale bash nie wydrukował żadnych błędów (ale utworzył pusty plik), więc pomyślałem, że może to coś znaczy? (np. data |> tmp.txt)

Bdimych2 Bdimych2
źródło
1
Czy jesteś pewien, że polecenie nie ma formy date |> tmp.txt cmd2? Ponieważ to zmienia odpowiedź.
Konrad Rudolph,

Odpowiedzi:

17

To wydaje się być tylko potokiem, w którym druga część jest pustym poleceniem, zawierającym tylko przekierowanie. Pisanie tego jako date | >filemoże ułatwić interpretację. Puste polecenie nie robi nic, tylko przetwarza przekierowanie, tworząc plik.

date >| filez drugiej strony działałoby jako przesłonięcie noclobberopcji powłoki, co zapobiega regularnemu >nadpisywaniu istniejących plików.

$ touch foo; set -o noclobber
$ date > foo
bash: foo: cannot overwrite existing file
$ date >| foo       # works
ilkkachu
źródło
1

Tak, nie wyrzuci błędu, ponieważ dla bash > fileoznacza przekierowanie do pliku o nazwie file. Ponieważ w twoim przypadku nie ma nic do przekierowania do pliku, bash po prostu utworzy nazwę pliku filebez niczego.

[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
źródło
Zabawny. Zsh ma inne zachowanie: po poleceniu my_filezawiera wynik działania date.
NI
12
@NajibIdrissi, w zsh, gdy są tylko przekierowania i nie ma polecenia, zshuruchamia $NULLCMDpolecenie ( catdomyślnie) lub $READNULLCMD(domyślnie pager), jeśli są tylko przekierowania wejściowe .
Stéphane Chazelas,