Écrire dans un fichier, mais le remplacer si il existe
echo "text" >> 'Users/Name/Desktop/TheAccount.txt'
Comment puis-je faire en sorte qu'il crée le fichier s'il n'existe pas, mais la remplace si elle existe déjà. Maintenant ce script ajoute juste.
- eh bien..c'est génial. J'ai reconnu > un peu plus tôt que d' >>.
Vous devez vous connecter pour publier un commentaire.
Un peu de compréhension de la façon dont *nix tuyaux travail aidera.
En bref, le
>>
opérateur de redirection va ajouter des lignes à la fin du fichier spécifié, où-comme le facteur le plus de>
de vider et remplacer le fichier.-bash: TheAccount.txt: cannot overwrite existing file
.>
et>>
sont les redirection de la sortie opérateurs. La conduite de l'opérateur est|
.>|
à force de remplacer la version existanteEn Bash, si vous avez défini noclobber la
set -o noclobber
, puis vous utilisez la syntaxe>|
Par exemple:
echo "some text" >| existing_file
Cela fonctionne aussi si le fichier n'existe pas encore
Vérifier si noclobber est fixé à:
set -o | grep noclobber
Pour une explication plus détaillée sur ce type spécial de l'opérateur, voir ce post
Pour une liste plus exhaustive des opérateurs de redirection, reportez-vous à ce post
&>| file
fonctionne. Ce shell et version utilisez-vous? @stimuler pour zsh les deux devrait fonctionner, pour le bash c'est seulement>|
echo "aaa" &>| test.txt
résultats dans l'erreur-bash: syntax error near unexpected token |
. Mon noclobber est définie Sur.echo "aaa" >| test.txt 2>&1
ou utiliser un autre environnement.Malgré
NylonSmile
's réponse, qui est "une sorte de" bon.. j'ai été incapable de remplacer fichiers, de cette manière..echo "i know about Pipes, girlfriend" > thatAnswer
pour résoudre mes problèmes.. j'ai eu à utiliser...
>!
, à la..Évidemment, être prudent avec ce...
NOCLOBBER
ensemble. Utilisationsetopt clobber
pour restaurer le comportement par défaut.Si votre environnement ne permet pas de les écraser avec
>
, l'utilisation de la pipe|
ettee
plutôt comme suit:Remarque cela permettra également d'imprimer sur la sortie standard (stdout). Dans le cas où cela n'est pas souhaité, vous pouvez rediriger la sortie vers
/dev/null
comme suit:Juste de noter que si vous souhaitez rediriger les deux std::eree et std::cout d'un fichier alors que vous avez noclobber ensemble (c'est à dire
set -o noclobber
), vous pouvez utiliser le code:Plus d'informations sur ce qui peut être vu à https://stackoverflow.com/a/876242.
Aussi cette réponse @TuBui la question sur la réponse @BrDaHa fourni ci-dessus à Août 9 '18 à 9:34.
D'écraser un fichier de contenu vers un autre fichier. l'utilisation de chat par exemple.
Maintenant à remplacer foobar, nous pouvons utiliser un chat de commande comme ci-dessous
Si vous avez de sortie qui peut avoir des erreurs, vous souhaiterez peut-être utiliser une esperluette et un plus grand que, comme suit:
my_task &> 'Users/Name/Desktop/task_output.log'
cela permettra de rediriger les deux stderr et stdout dans le fichier journal (au lieu de la sortie standard uniquement).