Une telle redirection «|>» est-elle juste une erreur ou cela signifie-t-elle quelque chose?

9

Je l'ai tapé par erreur mais bash n'a imprimé aucune erreur (mais a créé un fichier vide) alors j'ai pensé que cela signifiait peut-être quelque chose? (par exemple date |> tmp.txt)

Bdimych2 Bdimych2
la source
1
Êtes-vous sûr que la commande n'est pas du formulaire date |> tmp.txt cmd2? Parce que cela change la réponse.
Konrad Rudolph

Réponses:

17

Cela semble être juste un pipeline où la deuxième partie est une commande vide, contenant uniquement la redirection. Le date | >filerédiger comme pourrait le rendre plus facile à interpréter. La commande vide ne fait rien d'autre que traiter la redirection, créant le fichier.

date >| filed'autre part agirait comme un remplacement pour l' noclobberoption shell, ce qui empêche le régulier >d'écraser les fichiers existants.

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

Oui, il ne générera pas d'erreur car pour bash > filesignifie rediriger vers un fichier nommé file. Comme dans votre cas, il n'y a rien à rediriger vers un fichier, bash créera simplement un nom de fichier filesans rien.

[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
la source
Drôle. Zsh a un comportement différent: après la commande, my_filecontient la sortie de date.
NI
12
@NajibIdrissi, in zsh, lorsqu'il n'y a que des redirections et aucune commande, zshexécute la $NULLCMDcommande ( catpar défaut) ou $READNULLCMD(un pager par défaut) s'il n'y a que des redirections d' entrée .
Stéphane Chazelas