^ls^python
executará sua necessidade imediata (repita o comando anterior, substituindo python
pelo ls
)
Às vezes, esqueço meus caminhos relativos e, quando localizo o arquivo, digito:
Cris-Mac-Book-2:weird cris$ ls ../../../
Icon? Research Support
Cris-Mac-Book-2:weird cris$ ls ../../../Support
Fourganizical PicoCryptical SupportPlan.txt
MoneyProjectical Qwontical Testcomms
OSICAL StanTechStatistical todo
Cris-Mac-Book-2:weird cris$ ls ../../../Support/PicoCryptical
S cs mini php py readme
Cris-Mac-Book-2:weird cris$ ls ../../../Support/PicoCryptical/py/StanTechPico.py
Para executar este script agora, eu me encontro pressionando ← até que eu volte ao início do comando, então substituindo python
por ls
.
Quando eu faço isso por muito tempo ← (o que parece ser frequente) eu estou sempre pensando, deve haver uma maneira mais rápida de editar a cadeia de comando, ou executar o comando anterior saída.
Então, não me qualificando como um superusuário bash, tentei canalizar a saída de ls para python, o que não funcionou como esperado:
Cris-Mac-Book-2:weird cris$ ls ../../../Support/PicoCryptical/py/StanTechPico.py | python
File "<stdin>", line 1
../../../Support/PicoCryptical/py/StanTechPico.py
^
SyntaxError: invalid syntax
Cris-Mac-Book-2:weird cris$
Então, minha pergunta: como colocar a saída STDOUT
de um comando anterior, na posição do argumento de um novo comando?
Não tenho certeza se você está realmente perguntando
But I guess what I really want is to know how to put the STDOUT output of one command in the argument position of another command, from the command line?
Acho que o que você pode achar útil é usar $_
$ ls /tmp/long/path/which/contains/file
/tmp/long/path/which/contains/file
$ python $_
O $_
é substituído pelo argumento final do comando anterior que você executou.
Consulte o link
No entanto, se você realmente quiser usar o stdout como um argumento para outro comando, você pode usar xargs
para isso (veja link )
$ ls /tmp/long/path/which/contains/file | xargs python
Você já usou backticks?
python 'ls ../../../somefile'
Chamará python
com a saída de ls
como argumento.
Não totalmente certo se é isso que você está perguntando, no entanto.
Você pode digitar
python
e pressione ALT + .
Pressionando ALT + . insere o último argumento do último comando. Pressionando o atalho novamente vai mais para trás.
EDIT: Eu testei isso em diferentes Linux e OpenBSD usando bash, sh, ksh, dash, zsh. Ele não funciona em (t) csh. O que me surpreende porque achei que é uma característica da readline?!
Diferente da resposta de Andrew, um bom truque para saber é que Ctrl + a pula o cursor para o início da linha.
Sua necessidade imediata parece resolvida, mas aqui estão algumas soluções para sua necessidade de longo prazo de encontrar " uma maneira mais rápida de editar a seqüência de comando ".
Do seu exemplo, parece que você já tem a conclusão completa ( link ) no seu sistema, para que você deve ser capaz de fazer exatamente a mesma coisa com Tab , apenas inicie o comando com python
ao invés de ls
então Tab de distância.
Aqui estão alguns dos atalhos básicos que eu me encontro usando o tempo todo (a maioria trabalha em qualquer sistema baseado em * nix, mas alguns ... especialmente o OS X ... podem ser irritantes às vezes).
!!
irá repetir o último comando no histórico (e imprimirá qual foi o comando)
$ ls
file1
file2
$ !!
ls
file1
file2
!$
imprimirá o último argumento do seu comando anterior ( $_
é mencionado acima, que é bash específico, é basicamente o equivalente ... lá, eu fiz, deixe o debate começar)
$ ls ../file.py
file.py
$ python !$
python ../file.py
script output ...
Para mais alguns ótimos, consulte a seção "Atalhos de teclado" em Referência de comandos de terminal do Linux . Mesmo que essa página seja específica do Linux Mint, o único sistema * nix que eu acho insatisfeito com esses atalhos é o OS X.
Tags command-line redirection