Предполагая, что PWD
правильный, таким образом можно вернуться в ZShell.
% cd ~/tmp
% mkdir -p a/a/a/a/a/a/a/a/a/a/a
% cd !$
cd a/a/a/a/a/a/a/a/a/a/a
% rm -rf ~/tmp/a
% undir
% pwd
/Users/jmates/tmp
%
Пользовательская функция undir
выполняет цикл возврата-выхода-цепочки-пути:
function undir {
local dir
dir=$PWD:h
while [[ $dir != / ]]; do
builtin cd -q $dir 2>/dev/null
if [[ $? -eq 0 ]]; then
dir=/
else
dir=$dir:h
fi
done
}
Обратите внимание, что вы не можете полагаться на команду pwd
, поскольку она дает результаты отличаются от поддерживаемой оболочкой переменной PWD
:
% mkdir -p a/a/a/a/a/a/a/a/a/a
% cd !$
cd a/a/a/a/a/a/a/a/a/a
% rm -rf ~/tmp/a
% pwd
/Users/jmates/tmp/a/a/a/a/a/a/a/a/a/a
% cd ..
% pwd
.
% echo $PWD
/Users/jmates/tmp/a/a/a/a/a/a/a/a/a
%
Оболочки, не являющиеся zsh
, несомненно, потребуют других решений.