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.

34
csh
demandé sur Braiam 2010-07-20 06:37:31

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.

32
répondu Nicholas Knight 2010-07-20 02:40:41

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>.

19
répondu sarnold 2010-07-20 03:17:12

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 `!!`
8
répondu David Woods 2013-03-22 16:44:06

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...

3
répondu mhd 2010-07-20 03:15:22

pourquoi ne pas utiliser la substitution. Pareil:

2
répondu NawaMan 2010-07-20 02:44:47

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.

1
répondu J. Polfer 2010-07-20 02:42:55

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.

1
répondu jnmistry 2016-09-30 23:25:53

enregistrer la sortie comme une variable?

bash: Output=$(ls); echo $Output
0
répondu Anycorn 2010-07-20 02:43:10

My be vous pouvez utiliser la commande tee pour mettre la sortie à STDOUT ainsi à un fichier et puis l'utiliser.

0
répondu Raghuram 2010-07-20 02:59:52

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.

0
répondu Mark Wagner 2010-07-20 19:23:17

Vous pouvez toujours exécuter le processus à l'intérieur d'emacs d'une fenêtre shell. Il sera tout garder.

0
répondu Bruce Barnett 2013-05-30 20:01:28