Je voudrais copier le contenu d'une variable (appelée ici var
) dans un fichier.
Le nom du fichier est stocké dans une autre variable destfile
.
J'ai du mal à faire ça. Voici ce que j'ai essayé:
cp $var $destfile
J'ai également essayé la même chose avec la commande dd ... De toute évidence, le Shell pensait que $var
faisait référence à un répertoire et m'a donc dit que ce répertoire était introuvable.
Comment puis-je contourner cela?
Utilisez la commande echo
:
var="text to append";
destdir=/some/directory/path/filename
if [ -f "$destdir" ]
then
echo "$var" > "$destdir"
fi
La if
teste que $destdir
représente un fichier.
Le >
ajoute le texte après avoir tronqué le fichier. Si vous souhaitez uniquement ajouter le texte de $var
au contenu du fichier existant, utilisez plutôt >>
:
echo "$var" >> "$destdir"
La commande cp
est utilisée pour copier des fichiers (dans des fichiers) et non pour écrire du texte dans un fichier.
echo
a le problème que si var
contient quelque chose comme -e
, il sera interprété comme un indicateur. Une autre option est printf
, mais printf "$var" > "$destdir"
étendra tous les caractères échappés de la variable. Ainsi, si la variable contient des barres obliques inverses, le contenu du fichier ne correspondra pas. Cependant, étant donné que printf
interprète uniquement les barres obliques inverses comme des échappements dans la chaîne de format, vous pouvez utiliser le spécificateur de format %s
pour stocker le contenu exact de la variable dans le fichier de destination:
printf "%s" "$var" > "$destdir"
Aucune des réponses ci-dessus ne fonctionne si votre variable:
-e
-n
-E
\
suivi d'un n
et donc ils ne peuvent pas être invoqués pour des contenus de chaîne arbitraires.
En bash, vous pouvez utiliser "ici des chaînes" comme:
cat <<< "$var" > "$destdir"
Si je vous ai bien compris, vous voulez copier $var
dans un fichier (s’il s’agit d’une chaîne).
echo $var > $destdir
Lorsque vous dites "copier le contenu d'une variable", cette variable contient-elle un nom de fichier ou contient-elle le nom d'un fichier?
Par votre question, je suppose que $var
contient le conten que vous voulez copier dans le fichier:
$ echo "$var" > "$destdir"
Cela fera écho à la valeur de $ var dans un fichier appelé $ destdir. Notez les citations. Très important d'avoir "$ var" entre guillemets. Aussi pour "$ destdir" s'il y a un espace dans le nom. Pour l'ajouter:
$ echo "$var" >> "$destdir"