Comment exécuter une commande Linux tout en utilisant la commande less ou dans les pages de manuel?

9

Je dirige généralement la commande lsavec lesset j'aimerais exécuter une commande pendant qu'elle est paginée. Par exemple, je tombe sur un fichier que je voudrais supprimer, donc je voudrais exécuter la commande rm {filename}tout en continuant de paginer. J'aimerais également espérer pouvoir utiliser la même méthode tout en parcourant les pages de manuel. Sinon, en quoi est-ce différent?

PeanutsMonkey
la source

Réponses:

8

Vous pouvez accéder à la ligne de commande en utilisant bang ( !) en moins.

Ainsi, par exemple, si vous tapez:

touch temp.txt
ls | less
!rm temp.txt

Et temp.txt devrait être parti.

Edit: Par défaut, il semble que l'homme utilise moins de pages (pour une raison quelconque, je pensais que cela utilisait more, peut-être dans le passé). Vous pouvez utiliser la même astuce, mais elle nécessite le chemin complet (par exemple. / Home / user / ...) pour le faire fonctionner.

En effet, l'invocation de man modifie le répertoire de travail actuel. Sur ma machine (xubuntu, en utilisant xfce-terminal), il passe à /usr/share/man. Si votre console affiche le CWD, vous pouvez le voir changer, ou vous pouvez le voir de l'intérieur manen entrant:

!pwd
Cendre
la source
man change réellement CWD, vous devez donc utiliser le chemin complet.
Rob
@Rob - Que voulez-vous dire par là man actually changes CWD?
PeanutsMonkey
J'ai configuré tmux pour afficher mon CWD dans ma barre d'état. Faire man man(ou quoi que ce soit) changera ma CWD pendant que l'homme est ouvert. Ma machine Linux n'est pas disponible pour le moment, et je ne suis pas sûr d'autre moyen de vérifier CWD, mais il me semble que c'est ce qu'il fait.
Rob
@Rob - Vous voulez donc dire que juste parce que vous utilisez tmux, cela change le répertoire de travail actuel lorsque vous exécutez la commande man {command}de say /home/{user}à un emplacement de la commande man?
PeanutsMonkey
Cela expliquerait le comportement que j'ai vu. Maintenant, pourquoi ça change la CWD, c'est une autre question ...
Ash
4

La manière générique de procéder consiste à suspendre le travail en cours, à exécuter la commande et à reprendre l'ancien travail.

ls | less (lire le texte, noter le nom du fichier)
Control-zpour suspendre la commande active en cours

Vous devriez obtenir une ligne similaire à celle-ci: [1]+ Stopped ls | less
([1] est le numéro du travail.)

rm testfile

fgou fg %1 (le 1 est le numéro du travail)

Vous pouvez suspendre plusieurs processus en même temps. Par exemple
ls | less
Control-z (output: [1]+ Stopped ls | less)
man rm
Control-z (output: [2]+ Stopped man rm)
rm -i testfile*

fg %1pour reprendre le travail 1 (en laissant la page de manuel ouverte en arrière-plan) ou
fg %2pour reprendre le travail 2 (man rm)

Si vous avez plusieurs processus suspendus, vous pouvez les répertorier avec jobs.

Hennes
la source