Respostas:
Um pouco de compreensão de como o * nix pipes funciona ajudaria.
Em suma, o >>
operador de redirecionamento anexará linhas ao final do arquivo especificado, sendo que o único maior que >
será vazio e substituirá o arquivo.
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
-bash: TheAccount.txt: cannot overwrite existing file
.
>
e >>
são os operadores de redirecionamento de saída . O operador do tubo é |
.
>|
para forçar a substituição existente
No Bash, se você definiu noclobber a la set -o noclobber
, usa a sintaxe>|
Por exemplo:
echo "some text" >| existing_file
Isso também funciona se o arquivo ainda não existir
Verifique se o noclobber está definido com: set -o | grep noclobber
Para uma explicação mais detalhada sobre esse tipo especial de operador, consulte esta postagem
Para uma lista mais completa de operadores de redirecionamento, consulte esta postagem
&>| file
funciona. Qual shell e versão você está usando? @stimulate para zsh ambos devem trabalhar , para a festança é única>|
echo "aaa" &>| test.txt
resulta em erro -bash: syntax error near unexpected token |
. Meu noclobber está ativado.
echo "aaa" >| test.txt 2>&1
ou usar outro shell.
Apesar NylonSmile
da resposta , que é "meio que" correta. Não foi possível sobrescrever arquivos dessa maneira.
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
para resolver meus problemas .. eu tive que usar ... >!
, la la ..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
Obviamente, tenha cuidado com isso ...
NOCLOBBER
definida. Use setopt clobber
para restaurar o comportamento padrão.
Se o seu ambiente não permitir a substituição >
, use pipe |
e, tee
em seguida, da seguinte maneira:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
Observe que isso também será impresso no stdout. Caso isso não seja desejado, você pode redirecionar a saída da /dev/null
seguinte maneira:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null
#!/bin/bash
cat <<EOF > SampleFile
Put Some text here
Put some text here
Put some text here
EOF
Apenas observe que, se você deseja redirecionar std :: cerr e std :: cout para um arquivo enquanto estiver com o noclobber definido (ou seja set -o noclobber
), poderá usar o código:
cmd >|file.txt 2>&1
Mais informações sobre isso podem ser vistas em https://stackoverflow.com/a/876242 .
Também a pergunta desta resposta de @ TuBui sobre a resposta @BrDaHa fornecida acima em 9 de agosto de 18 às 9:34.
Para substituir o conteúdo de um arquivo para outro arquivo. use gato, por exemplo.
echo "this is foo" > foobar.txt
cat foobar.txt
echo "this is bar" > bar.txt
cat bar.txt
Agora, para substituir o foobar, podemos usar um comando cat como abaixo
cat bar.txt >> foobar.txt
cat foobar.txt
>>
é
Se você possui uma saída que pode ter erros, convém usar um e comercial e maior que, da seguinte maneira:
my_task &> 'Users/Name/Desktop/task_output.log'
isso redirecionará stderr e stdout para o arquivo de log (em vez de apenas stdout).