Em zsh, cdswap
é… cd
. Quando dados dois argumentos, cd
substitui o primeiro argumento pelo segundo argumento no diretório atual e muda para o diretório resultante.
Você pode emular isso no bash fazendo cd
uma função.
cd () {
local i=1
while [[ "${!i}" = -* ]]; do ((++i)); done
if ((i == $# - 1)); then
local operands
operands=("$@")
operands[$i]=${PWD/${!i}/${!#}}
if [[ "${operands[$i]}" == "$PWD" ]]; then
echo >&2 "cd: string not in pwd: ${operands[$i]}"
return 1
fi
set -- "${operands[@]:$(($#-1))}"
fi
builtin cd "$@"
}