Como executar a saída de 'ls' da linha de comando?

2

À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?

    
por Cris Stringfellow 26.02.2013 / 18:48

6 respostas

6

^ls^python executará sua necessidade imediata (repita o comando anterior, substituindo python pelo ls )

    
por 26.02.2013 / 18:55
6

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
    
por 26.02.2013 / 19:01
4

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.

    
por 26.02.2013 / 18:51
3

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?!

    
por 26.02.2013 / 20:14
2

Diferente da resposta de Andrew, um bom truque para saber é que Ctrl + a pula o cursor para o início da linha.

    
por 26.02.2013 / 23:51
2

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).

  • Ctrl + ou Ctrl + salta por "palavras" em vez de caracteres individuais.
  • Ctrl + Um pula para o começo da linha de comando
  • Ctrl + E pula para o final da linha de comando
  • !! 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.

    
por 27.02.2013 / 00:30