Bash Shell脚本-测试当前目录或父/祖先目录中是否存在目录
我使用以下代码检测当前目录中是否存在文件夹Bash Shell脚本-测试当前目录或父/祖先目录中是否存在目录,bash,shell,mercurial,zsh,Bash,Shell,Mercurial,Zsh,我使用以下代码检测当前目录中是否存在文件夹.hg。如果没有,则函数返回: if [ ! -d ".hg" ]; then return fi 如何修改此选项以检查当前目录或父/祖先目录中是否存在.hg?我可以想象,如果不是像-d这样的选项,那么解决方案将是递归的。我只是在这个问题上作弊: if ! hg status > /dev/null 2>&1; then return fi hg status只要您在mercurial树中的某个位置,就应该成功。这将在
.hg
。如果没有,则函数返回:
if [ ! -d ".hg" ]; then
return
fi
如何修改此选项以检查当前目录或父/祖先目录中是否存在
.hg
?我可以想象,如果不是像-d
这样的选项,那么解决方案将是递归的。我只是在这个问题上作弊:
if ! hg status > /dev/null 2>&1; then
return
fi
hg status
只要您在mercurial树中的某个位置,就应该成功。这将在前面的目录中搜索由d指定的目录
d=.hg
r=1
for i in $(seq 0 $(pwd|tr -cd '/'|wc -c)); do
if [ -d "$d" ]; then
r=0
fi
d=../$d
done
if [ r==1 ]; then
return
另一种方法是将测试包装在while循环中,该循环将一直持续到当前工作目录为/,并将其保存到cd。。检查是否存在.hg目录后。您是否只对直系祖先感兴趣?假设目录结构类似于
/foo/bar/foo2/bar2/foobar
,如果我在foobar
中,我想知道.hg
是否存在于foobar
,bar2
,foo2
,中,或者foo
@kptunder:你不想知道它是否存在于/
中?@SvenMarnach这是我的一个derp。是的,/
会很好。太棒了,这很管用。时间一过,我就接受答案。让我知道我的理解是否正确:我们正在将hg status
的输出重定向到/dev/null
,因此不会打印任何内容并检查hg status
中的故障。2>&1
意味着什么?@kpshunder:这会将stderr(文件描述符2)重定向到stdout(文件描述符1),有效地将stderr发送到电子ORCU。这是必要的,因为如果您不在mercurial树中,hg status
将向stderr打印一条错误消息,我们也想隐藏此错误消息。我过去使用过hg status>/dev/null 2>&1
,但启动python解释器花费了太长时间。此脚本使我的mercurial提示符更快:)