164 votes

Comment passer la valeur d'une variable à l'entrée standard d'une commande ?

J'écris un shell script qui devrait être quelque peu sécurisé, c'est-à-dire qu'il ne transmet pas de données sécurisées via les paramètres des commandes et n'utilise de préférence pas de fichiers temporaires. Comment puis-je passer une variable à l'entrée standard d'une commande ?

Ou, si ce n'est pas possible, comment puis-je utiliser correctement les fichiers temporaires pour une telle tâche ?

16voto

Robert Jacobs Points 348

J'ai aimé La réponse de Martin mais cela pose quelques problèmes en fonction du contenu de la variable. Ce site

your-command <<< """$your_variable"""

est préférable si votre variable contient " o ! .

11voto

cnst Points 1699

Conformément à La réponse de Martin il existe une fonction de Bash appelée Cordes ici (qui est elle-même une variante de la version la plus répandue de la méthode d'évaluation de la qualité de l'air). Documents ici caractéristiques) :

3.6.7 Chaînes Here

Une variante de ces documents, le format est :

<<< word

Le mot est développé et fourni à la commande sur sa norme standard.

Notez que la fonction Here Strings semble être réservée au Bash, donc, pour une meilleure portabilité, il est préférable d'utiliser la fonction originale Here Documents, comme indiqué dans le tableau suivant La réponse de PoltoS :

( cat <<EOF
$variable
EOF
) | cmd

Ou, une variante plus simple de ce qui précède :

(cmd <<EOF
$variable
EOF
)

Vous pouvez omettre ( y ) sauf si vous souhaitez qu'elle soit redirigée vers d'autres commandes.

3voto

unbeli Points 9573

Essayez ça :

echo "$variable" | command

0voto

tripleee Points 28746

Si vous êtes venu ici à partir d'un duplicata, vous êtes probablement un débutant qui a essayé de faire quelque chose comme

"$variable" >file

o

"$variable" | wc -l

où vous vouliez manifestement dire quelque chose comme

echo "$variable" >file
echo "$variable" | wc -l

(Les vrais débutants oublient aussi les guillemets ; utilisent généralement des guillemets sauf si vous avez une raison spécifique de les omettre, du moins jusqu'à ce que vous compreniez la citation).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X