É simples. Se latest
produzir um nome de arquivo em stdout
, $()
é a resposta:
vim $( latest )
Veja man bash
.
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?
É simples. Se latest
produzir um nome de arquivo em stdout
, $()
é a resposta:
vim $( latest )
Veja man bash
.
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.