Sortie de la dernière commande shell
pas avant le milieu d'un script de construction de 3 heures, je me souviendrai que je veux voir quelque chose au début de la sortie après que ce soit fait. À ce point j'ai dépassé le nombre de lignes dans mon terminal donc je ne peux pas faire défiler pour le voir (ou le début est difficile à trouver). Bien sûr, je peux être meilleur pour stocker ma sortie, mais j'ai toujours été curieux de savoir si cela était possible.
Dans un shell linux, est-il possible de retourner la sortie de la dernière commande. Je me rends compte que je pourrais ont envoyé la sortie à un fichier, mais mon exigence est de récupérer cette sortie après la commande a été exécutée.
utilisant csh, mais entendrait parler de n'importe quel shell.
11 réponses
Non. La sortie d'un programme ne passe jamais entre les mains du shell. Sans redirection, il va directement au TTY. Avec la redirection, il va directement à n'importe quel fichier ou tuyau vers lequel il a été dirigé. Le shell n'a aucune idée de ce que le processus a envoyé à stdout/stderr.
script(1)
est exactement ce dont vous avez besoin:
script
make
exit
vim typescript
script
le programme démarre un nouveau shell et enregistre les entrées et les sorties vers le typescript
fichier. Quand vous avez terminé, fermez la coquille avec exit
ou ^D
. Si vous préférez ne pas démarrer un nouveau shell mais lancer votre construction, vous pouvez utiliser: script -c <command>
.
si exécuter la commande à nouveau ne changera rien, vous pouvez l'utiliser !! pour accéder au sommet de la pile d'histoire pour relancer la dernière commande. Le faire dans les bâtons arrière vous permettra d'utiliser le résultat.
$> find . -iname fileInUnknownLocationInHierarchy.txt
./something/buried/deep/where/you/dont/want/to/retype/fileInUnknownLocationInHierarchy.txt
$> vim `!!`
Cela pourrait devenir très salissant avec certaines commandes qui utilisent l'adressage du curseur. Quel est le résultat de votre session vim? Ou un exemple un peu plus sain: vous téléchargez un fichier avec wget, et il montre une barre de pourcentage allant de 0% à 100%. Quel est le résultat?
je pense que vous voulez essentiellement une copie papier de n'importe quoi entre votre ligne actuelle et l'invite précédente. Ce n'est pas quelque chose que la redirection de shell serait un bon exemple pour, c'est essentiellement quelque chose qu'un terminal le ferait. Vous pourriez le faire manuellement en copiant et collant à l'écran, et peut-être vous pourriez l'automatiser avec son exec la commande. tmux pourrait avoir quelque chose de similaire, et vous pouvez faire des choses bizarres avec le(S) Mode (s) shell D'Emacs, mais c'est une solution plutôt lourde. rxvt-unicode a un perl extension...
Vous pouvez voir le code de retour de la dernière commande, au moins dans bash, avec $?
.
en ce qui concerne stdout, Je ne pense pas que vous puissiez.
si vous cherchez purement le code de retour de la dernière commande exécutée, utilisez echo $?
.
cela aide généralement quand vous voulez savoir si votre dernière commande a été exécutée avec succès et vous pouvez également le mouler dans votre script de construction pour les alertes réussite/échec.
enregistrer la sortie comme une variable?
bash: Output=$(ls); echo $Output
My be vous pouvez utiliser la commande tee pour mettre la sortie à STDOUT ainsi à un fichier et puis l'utiliser.
C'est une fonction de votre terminal. Vous devriez vous concentrer sur la création d'une installation où vous n'avez pas à vous rappeler de faire quelque chose. Une solution possible est de lancer "screen" dans votre script de connexion (qui n'est pas si facile à obtenir) avec la journalisation activée.
Vous pouvez toujours exécuter le processus à l'intérieur d'emacs d'une fenêtre shell. Il sera tout garder.