Intenté abrir archivos con vim usando vim $(cat filelist)
como se sugirió anteriormentepregunta.
Supongamos que tengo el siguiente archivo:
~/Workspace/bar/foo.cpp
La ejecución vim $(cat filelist)
desde ~/Workspace
se abre correctamente foo.cpp
cuando filelist
contiene bar/foo.cpp
. Sin embargo, el comando no abre el archivo cuando filelist
contiene ~/Workspace/bar/foo.cpp
. Quiero saber por qué el uso de la ruta absoluta hace que el comando falle.
Respuesta1
Esto se debe al orden en el que se realizan los diferentes tipos de expansiones en un shell. La bash
página de manual dice:
La expansión se realiza en la línea de comando después de dividirla en palabras. Se realizan siete tipos de expansión: expansión de llaves, expansión de tilde, expansión de parámetros y variables, sustitución de comandos, expansión aritmética, división de palabras y expansión de nombres de rutas.
Reemplazando la ~
expansión de tilde, mientras que su $(...)
sustitución de comando. Ahora verá que después de realizar la sustitución del comando, no hay más sustitución de tilde. Con rutas absolutas reales (comenzando en la raíz del sistema de archivos /
) funcionaría.
Pero puedes realizar la expansión tú mismo con sed
:
vim $(sed "s_~_${HOME}_g" filelist)