En la primera parte de esta serie, discutimos el cd - comando en detalle, y en la segunda parte, analizamos en profundidad el pushd y popd comandos, así como los escenarios en los que resultan útiles.
Continuando con nuestra discusión sobre los aspectos de navegación de la línea de comandos, en este tutorial, discutiremos el CDPATH variable de entorno a través de ejemplos fáciles de entender. También discutiremos algunos detalles avanzados relacionados con esta variable.
Pero antes de continuar, vale la pena mencionar que todos los ejemplos de este tutorial se probaron en Ubuntu 14.04 con Bash 4.3.11(1).
La variable de entorno CDPATH
Incluso si su trabajo de línea de comandos implica realizar todas las operaciones en un directorio en particular, digamos su directorio de inicio, también debe proporcionar rutas absolutas al cambiar de directorio. Por ejemplo, considere una situación en la que estoy en /home/himanshu/Downloads directorio:
$ pwd
/home/himanshu/Downloads
Y el requisito es cambiar a /home/himanshu/Desktop directorio. Para hacer esto, por lo general, tendré que ejecutar:
cd /home/himanshu/Desktop/
o
cd ~/Desktop/
o
cd ../Desktop/
¿No sería fácil si pudiera ejecutar el siguiente comando:
cd Desktop
Sí, eso es posible. Y aquí es donde entra la variable de entorno CDPATH. Puede usar esta variable para definir el directorio base para el cd comando.
Si intenta imprimir su valor, verá que esta variable env está vacía de forma predeterminada:
$ echo $CDPATH
$
Ahora, considerando el caso que hemos estado discutiendo hasta ahora, usemos esta variable de entorno para definir /home/himanshu como directorio base para el comando cd.
La forma más fácil de hacer esto es:
export CDPATH=/home/himanshu
Y ahora, puedo hacer lo que no podía hacer antes:desde /home/himanshu/Downloads directorio, ejecute el cd Desktop comando con éxito.
$ pwd
/home/himanshu/Downloads
$ cd Desktop/
/home/himanshu/Desktop
$
Esto significa que ahora puedo hacer un cd en cualquier directorio bajo /home/himanshu sin especificar explícitamente /home/himanshu o ~ o ../ (o múltiples ../ ) en el comando cd.
Puntos a tener en cuenta
Ahora sabe cómo usamos la variable de entorno CDPATH para cambiar fácilmente a/desde /home/himanshu/Downloads desde/hacia /inicio/himanshu/Escritorio . Ahora, considere una situación en la que /home/himanshu/Desktop directorio contiene un subdirectorio llamado Descargas , y es este último el que pretende cambiar.
Pero de repente te das cuenta de que hacer un cd Desktop lo llevará a /home/himanshu/Desktop . Entonces, para asegurarse de que eso no suceda, haga lo siguiente:
cd ./Descargas
Si bien no hay ningún problema en el comando mencionado anteriormente, es un esfuerzo adicional de su parte (por pequeño que sea), especialmente teniendo en cuenta que tendrá que hacer esto cada vez que surja una situación de este tipo. Una solución más elegante a este problema puede ser establecer originalmente la variable CDPATH de la siguiente manera:
exportar CDPATH=".:/home/himanshu"
Esto significa que le está diciendo al comando cd que primero busque el directorio en el directorio de trabajo actual y luego intente buscar en /home/himanshu directorio. Por supuesto, si desea o no que el comando cd se comporte de esta manera depende completamente de su preferencia o requisito. Mi idea detrás de discutir este punto fue hacerle saber que este tipo de situación puede surgir.
Como ya habrá entendido, una vez que se establece la variable de entorno CDPATH, su valor, o el conjunto de rutas que contiene, son los únicos lugares en el sistema donde el comando cd busca directorios (excepto, por supuesto, los escenarios donde-en utiliza rutas absolutas). Por lo tanto, depende totalmente de usted asegurarse de que el comportamiento del comando se mantenga constante.
Continuando, si hay un script bash que usa el comando cd con rutas relativas, entonces es mejor borrar o desactivar primero la variable de entorno CDPATH, a menos que esté de acuerdo con quedar atrapado en problemas imprevistos. Alternativamente, en lugar de usar la exportación en el terminal para configurar CDPATH, puede configurar la variable de entorno en su .bashrc
después de probar shells interactivos/no interactivos para asegurarse de que el cambio que está tratando de hacer solo se refleje en los shells interactivos.
El orden en que aparecen las rutas en el valor de la variable de entorno también es importante. Por ejemplo, si el directorio actual aparece antes de /home/himanshu , entonces el comando cd primero buscará un directorio en el directorio de trabajo actual y luego pasará a /home/himanshu . Sin embargo, si el valor es "/home/himanshu:." luego se realizará la primera búsqueda en /home/himanshu y después de eso el directorio actual. No hace falta decir que esto afectará lo que hace el comando cd y puede causar problemas si no conoce el orden de las rutas.
Siempre tenga en cuenta que la variable de entorno CDPATH, como sugiere el nombre, solo funciona para el comando cd. Esto significa que mientras esté dentro de /home/himanshu/Downloads directorio, puede ejecutar el cd Desktop comando para cambiar a /home/himanshu/Desktop directorio, pero no puede hacer un ls . He aquí un ejemplo:
$ pwd
/home/himanshu/Downloads
$ ls Desktop
ls: cannot access Desktop: No such file or directory
$
Sin embargo, podría haber algunas soluciones simples. Por ejemplo, podemos lograr lo que queremos con el mínimo esfuerzo de la siguiente manera:
$ cd Desktop/;ls
/home/himanshu/Desktop
backup backup~ Downloads gdb.html outline~ outline.txt outline.txt~
Pero sí, puede que no haya una solución para cada situación.
Otro punto importante: como habrá observado, cada vez que usa el comando cd con la variable de entorno CDPATH configurada, el comando produce la ruta completa del directorio al que está cambiando en la salida. No hace falta decir que no todos querrían tener esta información cada vez que ejecutan el comando cd en su máquina.
Para asegurarse de que esta salida se suprima, puede usar el siguiente comando:
alias cd='>/dev/null cd'
El comando antes mencionado silenciará la salida siempre que el comando cd tenga éxito, pero permitirá que se produzcan los mensajes de error cuando el comando falle.
Por último, en caso de que tenga un problema en el que después de configurar la variable de entorno CDPATH, no puede usar la función de finalización de pestañas del shell, entonces puede intentar instalar y habilitar bash-completion; más información aquí.
Conclusión
La variable de entorno CDPATH es una espada de doble filo:si no se usa con precaución y conocimiento completo, puede llevarlo a trampas complejas que pueden requerir mucho de su tiempo precioso para resolverse. Por supuesto, eso no significa que nunca debas intentarlo; simplemente evalúe todas las opciones disponibles y si concluye que usar CDPATH sería de gran ayuda, entonces continúe y utilícelo.
¿Has estado usando CDPATH como un profesional? ¿Tienes más consejos para compartir? Comparta sus pensamientos en los comentarios a continuación.