User Tools

Site Tools


moverse_entre_directorios_con_bash_facilmente

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:~ $
moverse_entre_directorios_con_bash_facilmente.txt · Last modified: 2020/12/25 22:57 by 127.0.0.1