Como executo um comando Linux enquanto uso o comando less ou nas páginas do manual?

9

Eu geralmente canalize o comando lscom lesse gostaria de executar um comando enquanto ele está paginação por exemplo, me deparo com um arquivo que eu gostaria de apagar, então eu gostaria de executar o comando rm {filename}, enquanto ainda paginação. Também gostaria de poder usar o mesmo método ao ler as páginas de manual. Se não, como é diferente?

AmendoimMacaco
fonte

Respostas:

8

Você pode acessar a linha de comando usando bang ( !) dentro de menos.

Por exemplo, se você digitar:

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

E temp.txt deve ter sumido.

Edit: Por padrão, parece que o homem agora usa menos para a página (por algum motivo eu pensei que era usado more, talvez no passado). Você pode usar o mesmo truque, mas requer o caminho completo (por exemplo, / home / user / ...) para fazê-lo funcionar.

Isso ocorre porque a chamada man altera o diretório de trabalho atual. Na minha máquina (xubuntu, usando xfce-terminal) ele vai para /usr/share/man. Se seu console exibir o CWD, você poderá vê-lo mudar ou de dentro mandigitando:

!pwd
Cinza
fonte
O homem realmente altera o CWD, então você precisaria usar o caminho completo.
19412 Rob
@Rob - O que você quer dizer com isso man actually changes CWD?
PeanutsMonkey
Eu tenho o tmux configurado para mostrar meu CWD na minha barra de status. Fazer man man(ou qualquer coisa) mudará minha CWD enquanto o homem estiver aberto. Minha máquina linux não está disponível no momento e não tenho outra maneira de verificar o CWD, mas para mim parece que é isso que está fazendo.
19412 Rob
@ Rob - Então você quer dizer que só porque você está usando o tmux, ele altera o diretório de trabalho atual quando você executa o comando man {command}de say /home/{user}para um local do comando man?
PeanutsMonkey
Isso explicaria o comportamento que eu vi. Agora, por que ele está mudando a CWD, isso é outra questão ...
Ash
4

A maneira genérica de fazer isso é suspendendo o trabalho atual, executando o comando e retomando o trabalho antigo.

ls | less (leia o texto, observe o nome do arquivo)
Control-zpara suspender o comando ativo atual

Você deve obter uma linha semelhante a esta: [1]+ Stopped ls | less
([1] é o número do trabalho.)

rm testfile

fgou fg %1 (o 1 é o número do trabalho)

Você pode suspender vários processos ao mesmo tempo. Por exemplo
ls | less
Control-z (output: [1]+ Stopped ls | less)
man rm
Control-z (output: [2]+ Stopped man rm)
rm -i testfile*

fg %1para retomar o trabalho 1 (deixando a página do manual aberta em segundo plano) ou
fg %2para retomar o trabalho 2 (man rm)

Se você tiver vários processos suspensos, poderá listá-los jobs.

Hennes
fonte