Rediriger la sortie d'une commande vers un fichier (commande)
D'écrire la sortie standard d'une commande (dans ce cas, echo hi
) vers un fichier, vous pouvez le faire:
echo hi > outfile
Je voudrais une commande à la place d'une redirection ou d'un tuyau, de sorte que je n'ai pas besoin d'invoquer un shell. C'est finalement pour une utilisation avec Ansible, qui appelle python subprocess.POpen
.
Je suis à la recherche d':
stdout-to-file outfile echo hi
tee
rend la copie stdout vers un fichier assez facile, mais il accepte l'entrée standard stdin, pas une commande séparée.
Est là un lieu commun, un portable de commande qui fait cela? Il est assez facile d'en écrire un, bien sûr, mais ce n'est pas la question. En fin de compte, Ansible, je veux faire:
command: to-file /opt/binary_data base64 -d {{ base64_secret }}
Au lieu de:
shell: base64 -d {{ base64_secret }} > /opt/binary_data
Edit: à la Recherche pour une commande disponible sur RHEL 7, Fedora 21
Vous devez spécifier quel système d'exploitation que vous utilisez, car qui va faire une différence à ce que les commandes sont disponibles.
Il y a un portable de commande qui fait cela avec une syntaxe légèrement différente. Il est appelé un shell, et la syntaxe est la suivante:
sh -c ' > outfile echo hi'
En d'autres termes, au lieu de "stdout vers un fichier", il suffit d'écrire ">"
Sauf ensuite, vous avez la responsabilité de la traduction de la commande en une chaîne de caractères... Mais il peut ne pas être réellement en cas de bord, voyez-vous pourquoi c'est effrayant, et pourquoi chercher une meilleure alternative?
OriginalL'auteur ToBeReplaced | 2015-02-28
Vous devez vous connecter pour publier un commentaire.
Ce que vous sont actuellement à la recherche d', est un Ansible Module, qui prend deux paramètres,
Dans ce cas, vous pourriez utiliser
shell
module au lieu decommand
module, qui permet à ces redirections.par exemple
Vous pouvez cocher la case source de l'exemple et de la documentation ici.
C'est le plus simple. Et je crois que vous êtes conscients de cela. Je suis juste de mettre ceci dans l'ensemble pour tous ceux qui l'enveloppe et des modules de commande de la lecture de ce thread.
Si vous ne voulez pas le faire de cette façon, vous pouvez toujours écrire un wrapper module, qui accepte le "nom de fichier" comme un argument et exécuter en tant qu',
Tout ce que vous devez faire est de fourche, les pensions de titres, regarder dans les modules existants, et de personnaliser le vôtre en conséquence.
OriginalL'auteur Gourav Shah - Devops Trainer
Pas sûr si c'est ce que vous voulez, mais dans Ansible - Enregistrer enregistré variable de fichier j'ai trouvé ce que j'ai besoin de:
Ou, dans mon cas précis (peut être utile pour vous aussi) playbook a été en cours d'exécution sur Un système, mais j'avais besoin de le journal de B et l'avoir enregistré à localhost (parce qu'Un système est de frapper B et je veux ouvrir une session B de l'état):
OMI
run_once: true
est nécessaire dans mon cas, comme je veux le journal réunis qu'une seule fois par playbook de course (pas de dire 10 fois si le playbook est en cours d'exécution sur 10).De l'espace pour l'amélioration serait d'enregistrer stderr ainsi ou, éventuellement, à défaut de "Sauver lsof journal" la tâche quand il n'est pas vide.
OriginalL'auteur jhutar