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)
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)
Respostas:
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
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]$
my_filecontém a saída de date.
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 .
date |> tmp.txt cmd2? Porque isso muda a resposta.