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)
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)
Odpowiedzi:
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
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]$
my_filezawiera wynik działania date.
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 .
date |> tmp.txt cmd2? Ponieważ to zmienia odpowiedź.