Facilitar el moverse entre directorios desde la terminal Bash (bash-cdstack)
Con agregar unas pocas lineas de código a la configuración de la terminal Bash se puede facilitar mucho el movimiento entre diferentes directorios del sistema.
Bash-cdstack: https://github.com/bahamas10/bash-cdstack
Instalación.
cat cdstack.bash >> ~/.bashrc
Ejemplo de uso: Comando “s” para listar directorios visitados por “cd” y “s $n” para desplazarse.“b” permite ir al primer directorio listado. Por defecto se guarda un registro de 15 directorios (adaptar código).
pepe:/etc/systemd/network $ s -> 0: /etc/systemd/network 1: /etc/bonobo-activation 2: /proc/1 3: /proc 4: /home/busaca 5: /proc/10120/task/10128/fdinfo 6: /home/busi 7: /run/media/busi/71D2E7ED1CCE63F4 8: /proc/10120/task/10128/fdinfo 9: /home/busi pepe:/etc/bonobo-activation $ s 9 pepe:~ $ s 0: /etc/systemd/network 1: /etc/bonobo-activation 2: /proc/1 3: /proc 4: /home/busi2 5: /proc/10120/task/10128/fdinfo 6: /home/busi/Peliculas 7: /run/media/busi/71D2E7ED1CCE63F4 8: /proc/10120/task/10128/fdinfo -> 9: /home/busi
Código fuente de bash-cdstack.
#!/usr/bin/env bash # cd Stack management # # You `cd` around like you normally would, and the directories are pushed # into a stack. Use the function `s` to view the stack of directories, # and run `s $num` to `cd` into the directory listed. # # inspired by http://www.derekwyatt.org/2011/08/18/my-bash-directory-management/ # # Author: Dave Eddy <dave@daveeddy.com> # License: MIT # config CD_STACK_MAX=${CD_STACK_MAX:-15} #CD_STACK_REVERSE= set by environment # internal _CD_STACK=("$PWD") _CD_STACK_PTR=0 cd() { builtin cd "$@" local ret=$? ((ret == 0)) || return "$ret" _CD_STACK=("$PWD" "${_CD_STACK[@]}") if ((${#_CD_STACK[@]} > CD_STACK_MAX)); then unset _CD_STACK[${#_CD_STACK[@]}-1] fi _CD_STACK_PTR=0 return "$ret" } s() { if [[ -n $1 ]]; then local dir=${_CD_STACK[$1]} builtin cd "$dir" local ret=$? if ((ret == 0)) && [[ -n $dir ]]; then _CD_STACK_PTR=$1 fi return "$ret" fi local max=${#_CD_STACK[@]} local i local arrow="$(tput setaf 2)->$(tput sgr0)" for ((i = 0; i < max; i++)); do local j=$i [[ -n $CD_STACK_REVERSE ]] && j=$((max - 1 -i)) if ((j == _CD_STACK_PTR)); then echo -n "$arrow" else echo -n ' ' fi printf '%2d: %s\n' "$j" "${_CD_STACK[$j]/#$HOME/~}" done } b() { s "$((_CD_STACK_PTR + 1))" }
Para hacer algo más completo el post se comentará a continuación el funcionamiento de la variable CDPATH.
La variable CDPATH
En la variable CDPATH pueden definirse una serie de directorios separados por dos puntos para buscar directorios (además del directorio actual de trabajo que es el valor predeterminado) al resolver rutas relativas.
Si con frecuencia se utiliza “cd” para dirigirse a ciertos subdirectorios de un directorio padre específico, se puede establecer el CDPATH al directorio padre. De esta forma se podrá utilizar “cd” sin necesidad de utilizar la ruta completa del directorio padre.
anita:~ $ cd lxpanel bash: cd: lxpanel: No existe el fichero o el directorio anita:~ $ export CDPATH=$HOME/.config/ # Indicar una ruta relativa impediría su funcionamiento fuera de "$HOME". anita:~ $ cd lxpanel /home/anita/.config/lxpanel anita:~/.config/lxpanel $ cd lxpanel bash: cd: lxpanel: No existe el fichero o el directorio anita:~/.config/lxpanel $ cd anita:~ $