Eu tentei abrir arquivos com o vim usando vim $(cat filelist)
como sugerido anteriormentepergunta.
Suponha que eu tenha o seguinte arquivo:
~/Workspace/bar/foo.cpp
A execução vim $(cat filelist)
correta ~/Workspace
abre foo.cpp
quando filelist
contém bar/foo.cpp
. No entanto, o comando não abre o arquivo quando filelist
contém ~/Workspace/bar/foo.cpp
. Quero saber por que usar o caminho absoluto faz com que o comando falhe.
Responder1
Isto se deve à ordem em que os diferentes tipos de expansões são realizadas em um shell. A bash
página de manual diz:
A expansão é executada na linha de comando após ser dividida em palavras. Existem sete tipos de expansão realizados: expansão de chaves, expansão de til, expansão de parâmetros e variáveis, substituição de comando, expansão aritmética, divisão de palavras e expansão de nome de caminho.
Substituindo a ~
expansão is til, enquanto a sua $(...)
é substituição de comando. Agora você vê que após a substituição do comando ser executada, não há mais substituição de til. Com caminhos absolutos reais (começando no sistema de arquivos root /
) funcionaria.
Mas você pode realizar a expansão sozinho com sed
:
vim $(sed "s_~_${HOME}_g" filelist)