Réponses:
Un peu de compréhension du fonctionnement des tuyaux * nix serait utile.
En bref, l' >>
opérateur de redirection ajoutera des lignes à la fin du fichier spécifié, où-comme le simple supérieur à >
videra et écrasera le fichier.
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
-bash: TheAccount.txt: cannot overwrite existing file
.
>
et >>
sont les opérateurs de redirection de sortie . L'opérateur de tuyaux est |
.
>|
pour forcer l'écrasement existant
Dans Bash, si vous avez défini noclobber à la set -o noclobber
, vous utilisez la syntaxe>|
Par exemple:
echo "some text" >| existing_file
Cela fonctionne également si le fichier n'existe pas encore
Vérifiez si le noclobber est défini avec: set -o | grep noclobber
Pour une explication plus détaillée sur ce type d'opérateur spécial, voir cet article
Pour une liste plus exhaustive des opérateurs de redirection, reportez-vous à cet article
&>| file
fonctionne. Quel shell et quelle version utilisez-vous? @stimulate for zsh both should work , for bash it's only>|
echo "aaa" &>| test.txt
entraîne une erreur -bash: syntax error near unexpected token |
. Mon noclobber est activé.
echo "aaa" >| test.txt 2>&1
ou utiliser un autre shell.
Malgré NylonSmile
la réponse de , qui est "en quelque sorte" correcte .. Je n'ai pas pu écraser les fichiers de cette manière ..
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
pour résoudre mes problèmes .. je devais utiliser ... >!
, á la ..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
Évidemment, soyez prudent avec cela ...
NOCLOBBER
défini l' option zsh non par défaut . Utilisez setopt clobber
pour restaurer le comportement par défaut.
Si votre environnement ne permet pas d'écraser avec >
, utilisez plutôt pipe |
et tee
comme suit:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
Notez que cela s'imprimera également sur la sortie standard. Si cela n'est pas souhaité, vous pouvez rediriger la sortie /dev/null
comme suit:
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
Notez simplement que si vous souhaitez rediriger à la fois std :: cerr et std :: cout vers un fichier alors que vous avez défini noclobber (c'est-à-dire set -o noclobber
), vous pouvez utiliser le code:
cmd >|file.txt 2>&1
Plus d'informations à ce sujet peuvent être consultées sur https://stackoverflow.com/a/876242 .
Aussi la réponse de @ TuBui à cette réponse sur la réponse @BrDaHa fournie ci-dessus le 9 août 18 à 9:34.
Pour remplacer le contenu d'un fichier dans un autre fichier. utiliser chat par exemple.
echo "this is foo" > foobar.txt
cat foobar.txt
echo "this is bar" > bar.txt
cat bar.txt
Maintenant, pour remplacer foobar, nous pouvons utiliser une commande cat comme ci-dessous
cat bar.txt >> foobar.txt
cat foobar.txt
>>
ajoute, pas l'écrasement
Si vous avez une sortie qui peut contenir des erreurs, vous pouvez utiliser une esperluette et une plus grande que, comme suit:
my_task &> 'Users/Name/Desktop/task_output.log'
cela redirigera à la fois stderr et stdout vers le fichier journal (au lieu de stdout uniquement).