Gostaria de saber como reutilizar a última saída do console, ou seja:
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
methodofaction
fonte
fonte
/dev/tty
, mas deve ser possível capturar qualquer coisa enviada parastdout
oustderr
que possa ser adequada.Respostas:
Supondo que o bash:
fonte
`backtick-commands`
!cd $(dirname $(which python))
aqui vou eu!Ainda não mencionado, use uma variável:
fonte
cd $dir
Todas as outras soluções envolvem a modificação do fluxo de trabalho ou a execução do comando duas vezes, o que pode não ser adequado se levar muito tempo para ser executado ou não for repetível (por exemplo, exclui um arquivo - a execução do arquivo resultaria em um resultado diferente).
Então, aqui está uma ideia mais complicada, se você precisar:
.bashrc
prompt do bash
Isso tem alguns problemas, então serve apenas como ponto de partida. Por exemplo, o arquivo de saída (
~/<pid>.out
) pode crescer muito e encher seu disco. Além disso, todo o seu shell pode parar de funcionar setee
morrer.Ele poderia ser modificado para capturar apenas a saída do comando anterior usando
preexec
eprecmd
hooks no zsh, ou uma emulação deles no bash, mas isso é mais complicado de descrever aqui.fonte
tee
contra sinais (tente pressionarCtrl+C
e executar mais alguns comandos). Use oscript
utilitário que não possui nenhum desses problemas.Um rascunho de trabalho para um shell tradicional:
Agora podemos colocar a tela em um arquivo. Precisa de sudo.
A propósito
screendump
: o programa chamado não funciona mais para mim. Talvez apenas para kernels antigos. / dev / pts / N também não funcionou para mim. Talvez você precise de algum MKDEV opcional em / dev - lembro-me sombriamente de alguns/dev/cuaN
, mas posso estar errado.Gostaríamos de canalizar a saída em vez de usar screen.dump. Mas de alguma forma isso não funciona - às vezes aguarda ENTER.
A captura não é um arquivo de texto normal com alimentações de linha, mas com - por exemplo - caracteres de 80 x 50 em uma sequência.
Para escolher as duas últimas linhas, uma para a saída do comando e uma para a linha de prompt, eu a reverto, pego 160 caracteres, reverto novamente e escolha 80.
Caso você já tenha se perguntado, por que existe um
rev
programa?Crítica:
O primeiro diagrama é feito com o explica.py
fonte
alias tee2tty='tee $(readlink /proc/$$/fd/1)'
Tente o seguinte:
fonte
Então, aqui está uma resposta:
Se você estiver executando no X, selecione a saída que deseja com o mouse para copiá-la e clique com o botão do meio para colá-la.
Se você estiver executando em um console de texto, poderá fazer uma coisa semelhante com o gpm .
fonte
(Infelizmente, não é uma resposta funcional, mas ainda algo curioso. Alguém interessado pode tentar concluir a implementação do recurso que vou falar sobre isso.)
No
eshell
Emacs, eles queriam ter esse recurso, mas ele não foi implementado de maneira completa (o que é refletido na documentação ).Por exemplo:
Veja bem, apenas a saída dos componentes internos pode ser capturada na
$$
variável.Mas bem, alguma programação elisp (cf.
eshell-mark-output
implementação em "esh-mode.el"), e você pode implementar uma função que "marque" a última saída e a retorne como resultado da função; para que você possa usar essa função em um comando eshell que você está solicitando - as funções elisp podem ser usadas em comandos eshell com a sintaxe elisp usual, ou seja, entre parênteses, assim:fonte
Se você perceber que deseja reutilizar a saída antes de clicar Enter, você pode salvá-la em uma variável: adicione
tmp=$(
no início da linha e)
no final. (Isso remove qualquer linha em branco no final da saída do comando e, de fato, remove qualquer nova linha final; isso raramente importa.)Se seu shell for ksh ou zsh, aqui está uma função útil que você pode usar para tornar isso mais automático. (Isso não ajuda no bash porque requer que o último comando em um pipeline seja executado no shell pai, o que é apenas o caso no ksh (não no pdksh) e no zsh.)
Use desta maneira:
fonte
(baseado na resposta do 4485 )
Isso é muita digitação, então crie um alias:
Em seguida, basta ligar
cd $(python -c ... | tee2tty)
É claro que isso exige que você já saiba o que deseja fazer com a saída, mas tem a vantagem de chamar o comando apenas uma vez.
fonte
fará o truque.
Leia aqui para mais detalhes: Substituição de comando .
fonte
Existe uma solução melhor:
Basta imprimir
!!
após o comando executado e você obterá resultados repetidos.Por exemplo
Original:
https://askubuntu.com/questions/324423/how-to-access-the-last-return-value-in-bash
fonte
!!
não repete o resultado do último comando, ele executa novamente o último comando. Sejot -r 1 0 1000
retornar um único número aleatório entre 0 e 1000, depois de executar o comando uma vez e obter539
, a execução!!
provavelmente fornecerá outro número.!!
também pode ser indesejável se o comando anterior levar um tempo significativo para ser executado ou repetir uma operação que não deve ser repetida (como alterar um arquivo).