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**
En supposant bash:
% python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/usr/lib/python2.7/site-packages
% cd $(!!)
cd $(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
% pwd
/usr/lib/python2.7/site-packages
Non encore mentionné, utilisez une variable:
dir=$( python -c ... )
cd "$dir"
Un brouillon de travail pour une coquille traditionnelle:
ttyid=$(readlink /proc/$$/fd/1)
\___/ \______/ \___/ | | |
| | | | | \- 0: stdin
| | | | | 1: stdout <- our interest
| | | | | 2: stderr
| | | | \- fd is, maybe, filedescriptor
| | | |
| | | \- $$ is the PID of the current process (Shell,
| | | in our case)
| | |
| | \- you know, much runtime stuff is here
| |
| \- readlink extracts the symbolic link of /proc/$$/fd/1
| lrwx------ 1 stefan stefan 64 2011-03-18 09:11
| /proc/22159/fd/1 -> /dev/pts/4
|
\- /dev/tty3 for real Shell, /dev/pts/3 for xterm
Maintenant, nous pouvons chat l'écran dans un fichier. Besoin de sudo.
id=${ttyid//\/dev\/tty}
Sudo cat /dev/vcs$id > screen.dump
Apropos screendump
: un programme nommé Namet ne fonctionne plus pour moi. Peut-être que pour les noyaux plus âgés seulement./dev/pts/n n'a pas fonctionné pour moi aussi. Peut-être que vous devez avoir une option mkdev dans/dev - je me souviens sombre de certains /dev/cuaN
, mais je me trompe peut-être.
Nous aimerions pipeler la sortie au lieu d'utiliser Screen.Dump. Mais d'une manière ou d'une autre, cela ne fonctionne pas - parfois, il attend d'entrer.
La capture n'est pas un fil de texte normal avec des lignes ligne, mais avec - par exemple - des caractères 80x50 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'enlève, choisissez 160 caractères, revenez à nouveau et choisissez 80.
rev vcs4.dat | sed 's/\(.\{160\}\).*/\1/g' | rev | sed 's/\(.\{80\}\).*/\1/g'
Juste au cas où vous vous êtes jamais demandé, pourquoi il y a un programme rev
.
La critique:
Le premier diagramme est fabriqué avec expliquer.py
Essaye ça:
$ cd $(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
$ pwd
/Library/Python/2.6/site-packages
Donc, euh, voici une réponse:
Si vous utilisez sous X, sélectionnez la sortie souhaitée avec la souris pour la copier, puis cliquez sur le milieu pour la coller.
Si vous utilisez une console de texte, vous pouvez faire une chose similaire avec GPM .
(Ce n'est pas une réponse de travail, malheureusement, mais toujours quelque chose de curieux. Une personne intéressée pourrait bien essayer de compléter la mise en œuvre de la fonctionnalité que je vais vous parler.)
Dans eshell
Intérieur EMACS, ils souhaitaient avoir une telle fonctionnalité, mais elle n'est pas mise en œuvre de manière complète (cependant reflétée dans la documentation ).
Par exemple:
~ $ pwd
~
~ $ /bin/echo $$
~
~ $ /bin/pwd
/home/imz
~ $ /bin/echo $$
~ $
Vous voyez, seule la sortie des cométiches peut être capturée dans le $$
variable.
Mais bien, une programmation ELISP (cf. eshell-mark-output
Mise en œuvre dans "ESH-MODE.EL"), et vous pouvez implémenter une fonction qui "marque" la dernière sortie et le renvoie comme le résultat de la fonction; Pour que vous puissiez utiliser cette fonction dans une commande eShell que vous demandez - les fonctions ELISP peuvent être utilisées dans les commandes de eShell avec la syntaxe Elisp habituelle, c'est-à-dire entre parenthèses, comme ceci:
~ $ /bin/echo (buffer-name)
*eshell*
~ $ /bin/echo (car '(a b c))
a
~ $
cd $(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" | tee $(readlink /proc/$$/fd/1))
(Construire sur réponse de 4485 )
C'est beaucoup de dactylographie, alors faites un alias:
alias tee2tty='tee $(readlink /proc/$$/fd/1)'
Ensuite, appelez simplement cd $(python -c ... | tee2tty)
Ceci nécessite bien sûr que vous sachiez déjà ce que vous voulez faire avec la sortie, mais a l'avantage d'appeler la commande une seule fois.
$ cd \`python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"\`
fera l'affaire.
Lisez ici pour plus de détails: Substitution de commande .
Si vous réalisez que vous allez vouloir 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 finale; cela compte rarement.)
tmp=$(python -c …)
echo "$tmp"
cd "$tmp"
Si votre shell est ksh ou zsh, voici une fonction utile que vous pouvez utiliser pour le rendre plus automatique. (Ce n'est aucune aide dans Bash car elle nécessite la dernière commande dans un pipeline à exécuter dans la coque mère, ce qui n'est que le cas dans ksh (non pdksh) et ZSH.)
keep () {
local line IFS=$'\n'
kept=
while read -r line; do
printf '%s\n' "$line"
kept=$kept$line$IFS
done
}
alias keep=k
Utilisez-le de cette façon:
python -c … |k
cd $kept