C'est une solution vraiment hacky, mais cela semble fonctionner la plupart du temps. Lors des tests, j'ai remarqué que cela ne fonctionnait parfois pas très bien lors de l'obtention d'un ^C sur la ligne de commande, même si je l'ai un peu modifié pour qu'il se comporte un peu mieux.
Ce hack est un hack en mode interactif uniquement, et je suis assez confiant que je ne le recommanderais à personne. Les commandes en arrière-plan sont susceptibles de provoquer un comportement encore moins défini que la normale. Les autres réponses sont un meilleur moyen d'obtenir des résultats par programmation.
Cela étant dit, voici la "solution":
PROMPT_COMMAND='LAST="`cat /tmp/x`"; exec >/dev/tty; exec > >(tee /tmp/x)'
Définissez cette variable d'environnement bash et lancez les commandes souhaitées. $LAST
aura généralement la sortie que vous recherchez :
startide seth> fortune
Courtship to marriage, as a very witty prologue to a very dull play.
-- William Congreve
startide seth> echo "$LAST"
Courtship to marriage, as a very witty prologue to a very dull play.
-- William Congreve
Je ne connais aucune variable qui le fasse automatiquement . Pour faire autre chose que copier-coller le résultat, vous pouvez réexécuter ce que vous venez de faire, par exemple
vim $(!!)
Où !!
est l'expansion de l'historique signifiant 'la commande précédente'.
Si vous vous attendez à ce qu'il y ait un seul nom de fichier contenant des espaces ou d'autres caractères susceptibles d'empêcher une analyse correcte des arguments, mettez le résultat entre guillemets (vim "$(!!)"
). Le laisser sans guillemets permettra à plusieurs fichiers d'être ouverts à la fois tant qu'ils n'incluent pas d'espaces ou d'autres jetons d'analyse du shell.