Esse redirecionamento “|>” é apenas um erro ou significa alguma coisa?

9

Eu digitei por engano, mas o bash não imprimiu nenhum erro (mas criei um arquivo vazio), então pensei que talvez isso realmente significasse alguma coisa? (por exemplo, data |> tmp.txt)

Bdimych2 Bdimych2
fonte
1
Tem certeza de que o comando não é do formulário date |> tmp.txt cmd2? Porque isso muda a resposta.
Konrad Rudolph

Respostas:

17

Parece ser apenas um pipeline em que a segunda parte é um comando vazio, contendo apenas o redirecionamento. Escrevê-lo como date | >filepode facilitar a interpretação. O comando vazio não faz nada, mas processa o redirecionamento, criando o arquivo.

date >| filepor outro lado, atuaria como uma substituição da noclobberopção shell, o que impede que o regular >substitua os arquivos existentes.

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

Sim, ele não emitirá erro porque para bash > filesignifica redirecionar para um arquivo chamado file. Como no seu caso, não há nada para redirecionar para o arquivo, o bash criará apenas um nome de arquivo filesem nada.

[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
fonte
Engraçado. Zsh tem um comportamento diferente: após o comando, my_filecontém a saída de date.
NI
12
@NajibIdrissi, em zsh, quando há apenas redirecionamentos e nenhum comando, zshexecuta o $NULLCMDcomando ( catpor padrão) ou $READNULLCMD(um pager por padrão) se houver apenas redirecionamentos de entrada .
Stéphane Chazelas