Lors de l'exécution de certains tests, je dois exécuter une série de commandes. Cela me serait extrêmement utile et me ferait gagner beaucoup de temps s'il y avait un moyen de faire toutes ces choses:
- Exécutez la commande que je dois exécuter
- Redirige toutes les sorties de la commande vers un fichier spécifié
- Inclure la commande d'origine dans le fichier spécifié
- Imprimer la sortie de la commande d'origine dans le terminal
Les gens m'ont suggéré d'utiliser tee pour moi qui fait un excellent travail d'impression sur le terminal ainsi que l'envoi dans un fichier mais n'inclut pas la commande d'origine. Ce que j'aimerais finir, c'est un fichier où la première ligne est la commande que j'ai exécutée, puis en dessous la sortie de la commande.
Quelqu'un a suggéré ceci:
echo "ls -l" | xargs -I{} bash -c "echo >> output.file; eval {} >> output.file"
Mais cela n'imprime pas la sortie dans le terminal ou n'inclut pas la commande d'origine dans le fichier.
J'apprécierais toutes les idées.
command-line
shaneoh
la source
la source
tee
.Réponses:
C'est ce
tee
que vous recherchez.imprime la sortie de
ls -l
stdout (c'est-à-dire le terminal) et l'enregistre enoutfile
même temps dans le fichier . Mais : Il n'écrit le nom de la commande ni sur stdout ni dans le fichier. Pour y parvenir, il suffit de donnerecho
le nom de la commande avant d'exécuter la commande et de diriger les deux sorties verstee
:C'est lourd à taper, alors pourquoi ne pas définir une fonction?
Après cela, vous pouvez simplement exécuter
pour obtenir le résultat souhaité. Mettez la fonction dans votre
~/.bashrc
pour la définir dans chaque nouveau terminal.Si vous voulez pouvoir spécifier le fichier de sortie comme premier argument comme dans
au lieu de cela, faites-le:
Si vous ne voulez pas que le fichier de sortie soit écrasé mais plutôt y être ajouté, ajoutez l'
-a
option àtee
.la source
Vous pouvez utiliser la
script
commande qui crée un fichier dactylographié de tout ce qui est imprimé sur votre terminal. Il crée un shell fourchu et enregistrera tout jusqu'à ce que ce shell soit quitté.Alors si je
cat my_output
reçois la même sortie:la source
Vous pouvez utiliser la fonction de débogage du shell avec
tee
:( ... )
démarre un sous-shell qui vous permet de «collecter» les flux de sortie de toutes les commandes exécutées dans le sous-shell. Il contient également l'effet de laset
commande ci-dessous sur ce sous-shell.set -x
active l'x
option shell qui imprime toutes les commandes que le shell exécute dans le flux d'erreur standard avant de les exécuter.2>&1
redirige le flux 2 (erreur standard) vers le flux 1 (sortie standard).|
redirige le flux de sortie standard de la commande de gauche vers le flux d'entrée standard de la commande de droite.tee FILE
copie le flux d'entrée standard dans le fichierFILE
et sur la sortie standard.Si votre séquence de commandes est déjà dans un fichier de script, il serait plus logique de l'exécuter comme ceci:
la source