Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Shell脚本-测试当前目录或父/祖先目录中是否存在目录_Bash_Shell_Mercurial_Zsh - Fatal编程技术网

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提示符更快:)