J'aimerais savoir comment réutiliser la dernière sortie de la console, à savoir:
pv-3:method Xavier$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/Library/Python/2.6/site-packages
pv-3:method Xavier$ cd **LASTOUTPUT**
shell
command-line
io-redirection
méthodofaction
la source
la source
/dev/tty
, mais il devrait être possible de capturer tout ce qui est envoyé àstdout
oustderr
qui pourrait être adéquat.Réponses:
En supposant que bash:
la source
`backtick-commands`
!cd $(dirname $(which python))
j'arrive!Pas encore mentionné, utilisez une variable:
la source
cd $dir
Toutes les autres solutions impliquent de modifier votre flux de travail ou d'exécuter la commande deux fois, ce qui peut ne pas convenir si son exécution est longue ou sa répétition impossible (par exemple, il supprime un fichier - son réexécution produirait un résultat différent).
Alors, voici une idée plus compliquée si vous en avez besoin:
.bashrc
invite bash
Cela pose quelques problèmes, alors il ne s'agit que d'un point de départ. Par exemple, le fichier de sortie (
~/<pid>.out
) peut devenir très volumineux et remplir votre disque. En outre, toute votre coquille pourrait cesser de fonctionner si elletee
mourait.Il pourrait être modifié pour ne capturer que le résultat de la commande précédente en utilisant
preexec
etprecmd
hooks dans zsh, ou une émulation de ceux-ci dans bash, mais c'est plus compliqué à décrire ici.la source
tee
des signaux (essayez d’appuyerCtrl+C
et de lancer plusieurs commandes). Utilisez l'script
utilitaire qui n'a aucun de ces problèmes.Un brouillon de travail pour un shell traditionnel:
Nous pouvons maintenant afficher l’écran dans un fichier. Besoin de sudo.
Apropos
screendump
: le programme ainsi nommé ne fonctionne plus pour moi. Peut-être pour les noyaux plus âgés seulement. / dev / pts / N n'a pas fonctionné pour moi aussi. Vous avez peut-être besoin de quelques MKDEV optionnels dans / dev - je me souviens très mal de certains/dev/cuaN
, mais je peux me tromper.Nous aimerions diriger la sortie au lieu d'utiliser screen.dump. Mais de toute façon, cela ne fonctionne pas - parfois, il attend ENTER.
La capture n'est pas un fichier texte normal avec des sauts de ligne, mais avec, par exemple, 80 x 50 caractères dans une séquence.
Pour choisir les 2 dernières lignes, 1 pour la sortie de la commande et une pour la ligne d'invite, je l'inverse, je choisis 160 caractères, je reviens à nouveau et nous choisissons 80.
Juste au cas où vous vous seriez déjà demandé pourquoi il y avait un
rev
programme.La critique:
Le premier diagramme est fait avec explique.py
la source
alias tee2tty='tee $(readlink /proc/$$/fd/1)'
Essaye ça:
la source
Alors, voici une réponse:
Si vous utilisez X, sélectionnez le résultat souhaité avec la souris pour le copier, puis cliquez avec le bouton du milieu pour le coller.
Si vous utilisez une console texte, vous pouvez faire la même chose avec gpm .
la source
(Malheureusement, ce n’est pas une réponse satisfaisante, mais il ya toujours quelque chose de curieux. Une personne intéressée pourrait bien essayer de terminer la mise en oeuvre de la fonctionnalité dont je vais vous parler.)
À l'
eshell
intérieur d'Emacs, ils souhaitaient une telle fonctionnalité, mais celle-ci n'est pas implémentée de manière complète (ce qui est toutefois reflété dans la documentation ).Par exemple:
Vous voyez, seule la sortie des commandes intégrées peut être capturée dans la
$$
variable.Mais bon, une certaine programmation elisp (cf.
eshell-mark-output
implémentation dans "esh-mode.el"), et vous pourriez implémenter une fonction qui "marque" la dernière sortie et la renvoie comme résultat; afin que vous puissiez utiliser cette fonction dans une commande eshell que vous demandez - les fonctions elisp peuvent être utilisées dans des commandes eshell avec la syntaxe elisp habituelle, c'est-à-dire entre parenthèses, comme ceci:la source
Si vous réalisez que vous souhaitez réutiliser la sortie avant de frapper Enter, vous pouvez l'enregistrer dans une variable: ajoutez
tmp=$(
au début de la ligne et)
à la fin. (Cela supprime toute ligne vide à la fin de la sortie de la commande et supprime en fait toute nouvelle ligne; ceci importe rarement.)Si votre shell est ksh ou zsh, voici une fonction utile que vous pouvez utiliser pour rendre cela plus automatique. (Ce n'est pas une aide dans bash car il nécessite que la dernière commande d'un pipeline soit exécutée dans le shell parent, ce qui n'est le cas que dans ksh (pas pdksh) et zsh.)
Utilisez-le de cette façon:
la source
(s'appuyant sur la réponse de 4485 )
C'est beaucoup de dactylographie, alors faites un alias:
Ensuite, appelez simplement
cd $(python -c ... | tee2tty)
Bien entendu, cela nécessite que vous sachiez déjà ce que vous voulez faire avec la sortie, mais présente l'avantage d'appeler la commande une seule fois.
la source
fera l'affaire.
Lisez ici pour plus de détails: Substitution de commande .
la source
Il y a une meilleure solution:
Imprimez juste
!!
après la commande exécutée et vous obtiendrez une sortie répétée.Par exemple
Original:
https://askubuntu.com/questions/324423/how-to-access-the-last-return-value-in-bash
la source
!!
ne répète pas le résultat de la dernière commande, il réexécute la dernière commande. Sijot -r 1 0 1000
retourne un seul nombre aléatoire entre 0 et 1000, après avoir exécuté cette commande une fois et en obtenant539
, l'exécution!!
donnera probablement un autre nombre.!!
peut également être indésirable si la commande précédente prend beaucoup de temps à exécuter ou répète une opération qui ne devrait pas être répétée (comme changer un fichier).