cd al directorio anterior sin eco del nombre del directorio

9

Esta respuesta me dio la cd -forma abreviada de cambiar a mi directorio anterior en Bash. Tiene un problema importante: imprime el directorio al que cambia, desperdiciando el espacio de mi pantalla, ya que ese directorio se repite en el indicador en la línea siguiente.

Sé que puedo hacerlo cd $OLDPWD, también mencionado en esa respuesta, cd - >/dev/nullpero eso es mucho más escribir.

En la bashpágina man dice:

... o si - es el primer argumento, y el cambio de directorio es exitoso, el nombre de ruta absoluto del nuevo directorio de trabajo se escribe en la salida estándar.

¿Cómo puedo hacer -para no ser el primer argumento? ¿Usando alguno de los cdargumentos opcionales? ¿ Hay alguna otra forma de suprimir el eco o minimizar la escritura sin la necesidad de definir funciones / alias en cada máquina con la que trabajo?

Ishran
fuente
Más o menos la misma pregunta aquí ...
don_crissti

Respuestas:

12

cdsolo toma en cuenta el primer argumento, ignorando todos los demás. Ninguna de las opciones influye en el eco del nombre de ruta anterior (tal vez lo documentado -@tiene ese efecto, pero esa es una opción no válida en mi sistema).

Si no desea utilizar un alias / función, lo que podría darle incluso menos caracteres para escribir cd -o redirigir a /dev/null, mi sugerencia es comenzar a usar la expansión de tilde especial en bash:

cd ~-

Desde la bashpágina del manual:

Si el prefijo tilde es un '~ -', el valor de la variable de shell OLDPWD, si está configurado, se sustituye.

Esta parece ser otra área en bashla que se creó un significado especial. La expansión Tilde normalmente funciona en $ DIRSTACK, manipulado / investigado por pushd, popdy dirstambién se puede usar en otros comandos ( cp ~-/somefile .) y si lo ha usado pushd, puede usar ~N(donde N es un número de niveles retrasados) para llegar a estos directorios (para cdu otros comandos).


Por cierto, si tiene cuentas en varias máquinas y supone que usa ssh para iniciar sesión en ellas desde un solo lugar, debe considerar agregar a su ~/.bashrc:

if [ -f ~/.bash_common ]; then
    . ~/.bash_common
fi

y luego tenga un script en su máquina de trabajo que use scppara "empujar" bash_commona cada una de esas máquinas. De esa manera, puede agregar y compartir funcionalidades comunes en varias máquinas con una sobrecarga mínima.

Anthon
fuente