usa a saída do comando alias como nome do arquivo para abrir no vi

2

Eu configurei um alias esta manhã para ajudar a localizar o arquivo de log mais recente em um diretório. Meu alias parece com

alias latest="ls -lat | grep ^- | awk '{print $8}' | head -1"

Na minha pesquisa até agora esta manhã eu li um blog - ParsingLS que me diz que esta provavelmente não é a melhor maneira para fazer isso - vamos ignorar isso por enquanto, eu posso olhar para fazer um alias melhor usando find depois. Por agora suponha que eu tenha um comando funcionando perfeitamente esperado para produzir um nome de arquivo do diretório atual.

Eu pensei que eu seria capaz de fazer latest | vi , para abrir o último arquivo modificado no diretório, mas parece que isso não vai funcionar - vi reclama que a saída não é um terminal. Eu vi uma questão de stackoverflow que sugeriu que o problema está relacionado a subshells e tubulações e então tentei

latest | vi < 'tty' > 'tty'

Mas isso só me pega

'tty':ambiguous redirect

Tenho certeza de que há algo básico que não estou conseguindo sobre cachimbos aqui - eu só recentemente comecei a tentar usá-los a sério, alguma idéia?

    
por Chris O'Kelly 02.01.2013 / 23:35

2 respostas

4

É simples. Se latest produzir um nome de arquivo em stdout , $() é a resposta:

vim $( latest )

Veja man bash .

    
por waltinator 03.01.2013 / 01:21
1

Eu assumo que um pager não é suficiente?

Eu não acho que o vi tenha suporte para isso (pelo menos não o nvi ou o vi recente do FreeBSD), mas o vim faz isso:

latest | vim -

Uma solução alternativa é usar um canal nomeado:

mkfifo vi.fifo
latest > vi.fifo & vi vi.fifo
rm vi.fifo

Não é muito bonito e o FreeBSD vi parece precisar de um :e extra antes de ler o fifo.

    
por Thor 03.01.2013 / 00:05