假设我正在编辑一些文件。我有(说)一个终端打开和一个 gui 文件管理器。我目前在/my/very/long/and/winding/directory/path
终端。在我的 gui 中,我/my/very/long/and/winding/directory
在终端中删除
Back,我尝试cd ..
并收到错误消息,因为该目录不再存在。没什么大不了。我可以打字cd /my/very/long/and/winding
回到我想去的地方。但是,如果我懒得输入,是否有返回到最近仍然存在的目录的好方法?
编辑:cd ../../
在这种特殊情况下是一种解决方案。但我想知道是否有更一般的答案,我不知道我需要退多少步。
根据目录路径而不是..
链接返回一级目录:
cd $PWD:h
Run Code Online (Sandbox Code Playgroud)
或便携式方法:
cd "${PWD%/*}"
Run Code Online (Sandbox Code Playgroud)
(zsh 中的引号是可选的;如果目录名称不包含空格或 ,则其他 shell 中的引号是可选的\[*?
)
根据需要重复:h
或/*
多次以在目录层次结构中进一步向上。
或者,键入cd $PWD
然后按Tab以扩展$PWD
到其值并手动编辑结果。(根据您的完成和行编辑器设置,您可能需要在按之前添加/
after ,以按您绑定的键(默认)或或(默认+ )。)$PWD
Tabexpand-or-complete
Tabexpand-or-complete-prefix
expand-word
CtrlX *
假设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
%
Run Code Online (Sandbox Code Playgroud)
自定义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
}
Run Code Online (Sandbox Code Playgroud)
请注意,您不能依赖该pwd
命令,因为它给出的结果与 shell 维护的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
%
Run Code Online (Sandbox Code Playgroud)
如果不是这样,zsh
毫无疑问需要其他解决方案。
归档时间: |
|
查看次数: |
243 次 |
最近记录: |