Esse é um trabalho para uma função. Supondo que seu shell seja bash, você pode definir uma função em seu .bashrc
. A função estará disponível na próxima vez que você começar o bash.
cdwww () {
…
}
O que deve ser o …
? Um comando cd
, certamente. O caminho para o diretório atual está na variável PWD
e você pode usar processamento de strings e outras construções.
Por exemplo, a seguinte função vai para o diretório acima do diretório atual, logo abaixo de /var/www/html
, se o diretório atual estiver sob /var/www/html
.
cdwww () {
if [[ $PWD = /var/www/html/*/* ]]; then
local d="${PWD#/var/www/html/*/*/}"
cd "${PWD%"$d"}"
else
echo 1>&2 "$0: not under a web root"
return 3
fi
}
Você pode fazer essa função aceitar um caminho para um subdiretório diferente de /var/www/html/dev*/a
.
cdwww () {
if [[ $PWD = /var/www/html/*/* ]]; then
local d="${PWD#/var/www/html/*/*/}"
cd "${PWD%"$d"}/$1"
else
echo 1>&2 "$0: not under a web root"
return 3
fi
}
Uma abordagem diferente seria definir uma variável para o diretório de destino sempre que você alterasse os diretórios. O código a seguir organiza a execução da função chpwd
sempre que o diretório atual é alterado.
cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
if [[ $PWD = /var/www/html/*/* ]]; then
local d="${PWD#/var/www/html/*/*/}"
html_root="${PWD%"$d"}"
else
unset html_root
fi
}
Então você pode usar cd $html_root
(ou apenas $html_root
se você ativou shopt -s autocd
).