¿Es una buena idea usar el siguiente alias?
cd() {
pushd $1;
}
en bash?
Creo que esto sería muy útil, ya que puedo usar una serie de popd
s en lugar de solo una cd -
vez.
¿Hay algún caso en el que esto pueda ser un problema?
bash
shell
shell-script
alias
Lazer
fuente
fuente
alias cd=pushd
?pd
? ¿Eres el único usuario y administrador de tu sistema?autopushd
Respuestas:
Personalmente, tengo estos en mi bashrc y los uso todo el tiempo:
Luego puede navegar en la línea de comandos un poco como un navegador.
cd
cambia el directorioback
va al directorio anterior desde el quecd
editó. Yflip
se moverá entre los directorios actuales y anteriores sin extraerlos de la pila de directorios. En general, funciona muy bien.El único problema real que conozco es el hecho de que es un conjunto de comandos al que estoy completamente acostumbrado pero que no existe en la máquina de nadie más. Entonces, si tengo que usar la máquina de otra persona, puede ser un poco frustrante. Si estás acostumbrado a usar
pushd
ypopd
directamente, no tienes ese problema. Y si bien solocd
pone aliaspopd
, no tendrá el problema deback
no existir, todavía tendrá el problema quecd
no hace exactamente lo que espera en otras máquinas.Sin embargo, me gustaría señalar que su implementación particular de
cd
no funciona del todo, yacd
que lo normalcd
por sí solo irá a su directorio de inicio, pero el suyo no. La versión que tengo aquí no tiene ese problema. El mío también apareceDIRSTACK
en la parte delantera de ladirs
impresión, pero eso es más una cuestión de gustos personales que nada.Entonces, como dije, uso estos alias todo el tiempo y no tengo ningún problema con ellos. Es solo que puede ser un poco frustrante tener que usar otra máquina y luego encontrarla allí (lo cual no debería sorprender, pero son una de esas cosas que usa con tanta frecuencia que no piensa en ellas) , por lo que hacer que no funcionen como estás acostumbrado puede ser sorprendente).
fuente
<C-o>
depopd
la experiencia auténtica.Esta no es una respuesta directa a la pregunta, pero me enamoré de la ventana del historial del directorio en 4DOS. Tanto es así que escribí mi propia versión para Linux (y Cygwin). Nunca he logrado convertirlo en una utilidad fácil de instalar, pero si conoces un aviso de Bash, no debería ser tan difícil de ejecutar. Su pregunta me inspiró a ponerlo en un repositorio de Git y subirlo a GitHub: dirhistory .
Básicamente, es un demonio que recopila cambios de directorio de todos sus shells, y un programa Cdk que muestra el historial y le permite elegir cualquier directorio para cambiar (por lo que no está limitado a una pila). Lo encuentro realmente útil, y lo tengo vinculado a Ctrl-PageUp, tal como lo hizo 4DOS. (Incluso parcheé PuTTY para que enviara Ctrl-PageUp a Bash).
fuente
Para mí, pushd / popd / dirs es casi útil, pero le falta. Así que creé un 'contenedor' alrededor de estos llamados 'navd', implementado esencialmente como un conjunto de 20 alias. (Una de ellas es una función, realmente.) El código está debajo, pero aquí hay una breve explicación primero. (Una cosa buena acerca de "navd" y trabajar en máquinas de otras personas: hay una forma de "no instalar" para ejecutarlo: como una opción de instalación, simplemente puede pegar los comandos que implementan "navd" en el indicador de bash , y mientras dure esa sesión bash para esa máquina, funcionará navd. Eso no deja huella en el sistema de archivos, pero es una instalación temporal. Coloque esos comandos en .bashrc para una instalación "real", de curso.)
caracteristicas:
Cualquiera de los diecinueve comandos navd <N> gira la pila para que el directorio que se convierte en el directorio actual ahora también se muestre al frente de la pila. Los valores <N> positivos encuentran un directorio que cuenta desde la izquierda, con una indexación que comienza en cero. Los valores <N> negativos encuentran un directorio que cuenta desde la DERECHA, con una indexación que comienza en -1. (Esto sigue la convención de cómo se pueden usar los índices de matriz en Java y otros lenguajes).
Nota: Cualquier comando "navd" muestra la misma pila que usa "pushd" y "dirs", pero lo muestra SIN la entrada más a la izquierda que mostrarían "dirs" (dado que esa entrada no está realmente en la pila, es el directorio actual y con " directorios " que la entrada más a la izquierda cambia si se ingresa un comando de CD). (El "cd <ruta>" comando no afecta a ningún comportamiento de NAVD aunque ciertamente afecta el comportamiento de pushd / directorios / popd también ... Me encanta usar. "Cd -" ir "hacia atrás" una vez a una directorio del que acabo de navegar y "cd -" tampoco afecta el comportamiento de navd).
Bonificación: puede haber 19 alias más que NO rotan la pila, sino que simplemente cambian el directorio al lugar indicado en la pila.
2º Bono: "navh" muestra los comandos navd <path> del historial, para cargar fácilmente la pila con cortar y pegar. (Cada uno se enumera solo una vez, incluso si está en el historial varias veces, y la lista está ordenada. Además, las entradas se pueden colocar en un archivo $ HOME / .navhignore para evitar que esas entradas exactas aparezcan en la lista de navegación).
Tres comportamientos clave:
Si borra la pila y repite un comando específico "navd <path>", esa ruta irá en la pila. Eso es lo que quiero y espero ... pero pushd no hace eso: coloca el directorio actual por el que está navegando LEJOS de la pila, por lo que el efecto en la pila es variable (se siente impredecible) cuando repite el comando .
"navd <path>" no pondrá la misma ruta en la pila dos veces.
"navd <path>" se coloca en el historial de comandos con la ruta absoluta incluso si la ruta relativa se escribió para el comando.
Para mí, los últimos tres comportamientos descritos hacen que usar un comando "navd <path>" del historial sea mucho más útil que usar un "pushd <path>" del historial. Realmente puedo reutilizar la historia para ir a lugares. Y cuando lo hago, no "estropeo" mi pila.
Si puede y quiere comprenderlo, puede cambiar entre usar navd y pushd / dirs / popd. Ambos usan la misma pila; solo con un estilo diferente. Por ejemplo, use "popd" para eliminar elementos de la pila "navd", o use "dirs -c" para borrar la pila navd.
Piense en pushd / dirs / popd como "¿cómo vuelvo sobre mis pasos?".
Piense en navd como "¿cómo puedo mantener un conjunto de directorios favoritos y cambiar fácilmente entre ellos?".
Pegue lo siguiente en una ventana de terminal e inmediatamente puede comenzar a usar navd mientras dure esa sesión de terminal. Este es todo el código que hay para esta característica.
Estos alias se basan en comandos "bash". Se tiene especial cuidado para preservar el comportamiento normal de "cd -". (Muchas veces uso "cd -" en lugar de molestarme con pushd o navd, porque "cd -" es muy útil para volver al último "lugar" en el que estuviste, o cambiar entre solo 2 lugares, y funciona en todas partes sin instalación)
Estos comandos pueden, por supuesto, colocarse en el archivo .bashrc para una instalación más permanente de ellos.
fuente
Aquí hay otra solución que te puede gustar. Escribí esto después de jugar con la solución de @cjm. Utiliza el comando de diálogo para crear un menú de tipo ncurses a partir de la salida de directorios. Al seleccionar un elemento, ese directorio se colocará en la parte superior de la pila y se creará un CD en él. Esto tiene el beneficio sobre dirhistory de dar a cada emulador de terminal su propio búfer de historial de directorio y ser un poco más fácil de instalar.
Para instalar: una vez que haya alias de cd a pushd, instale el cuadro de diálogo, luego simplemente ponga esta función en su bashrc:
Me gusta un poco mejor que ejecutar dirs -v, luego ejecutar otro comando para hacer pop o cd en el directorio que quiero. Los menús de diálogo también se pueden personalizar a través de dialogrc.
Entonces, para responder a su pregunta, sí, creo que el alias empujado a cd es una gran idea. Es poco probable que tenga problemas de desbordamiento del búfer si reinicia su máquina regularmente al menos para actualizaciones. Aunque sería cuidadoso al usar cd al hacer scripts; cd en un ciclo while podría causar problemas de desbordamiento del búfer. No estoy seguro de qué controla el tamaño del búfer dirs / pushd.
fuente