¿Cómo puedo hacer que bash convierta '~'?

¿Cómo puedo hacer que bash convierta '~'?

Algunos programas no reconocen el acceso directo de tilde en los nombres de archivos y esperan rutas canónicas completas, por ejemplo, /home/dave/myfile.txten lugar de ~/myfile.txt.

¿Hay alguna manera de hacer que bash reemplace ~y ~userpor rutas canónicas completas cada vez que se use una tilde?

Respuesta1

Bueno, no estoy seguro acerca de Perl, pero en el script bash puedes hacer esa conversión con eval:

eval dir='~user/somedir'

$dir contendrá la ruta completa, es decir, /home/user/somedir en este punto.

Respuesta2

Cuando ejecutas un comando en el shell Bash, como:

command ~/myfile.txt

el shell primero hace la expansión de ~(a menos que esté entre comillas) y luego ejecuta el comando con el resultado.

Pero es cierto, algunos programas no interpretan el ~, por ejemplo:

$ cat "~/myfile.txt"
~/myfile.txt: No such file or directory

pero esto funciona en su lugar:

nano "~/myfile.txt"

Pero este comportamiento está enmascarado por la expansión de Bash, por lo queno necesitas ninguna interpretación adicional.

Tal vez sea obvio, pero tenga en cuenta que si un programa usa archivos de configuración y espera algunas rutas en él, no es obligación de Bash expandirlas.

información relacionada