Shell Scripting - Тестирование, если каталог существует либо в текущем каталоге, либо в каталоге parent / ancestor - PullRequest
1 голос
/ 24 февраля 2012

Я использую следующий код, чтобы определить, существует ли папка .hg в текущем каталоге. Если это не так, то функция возвращает:

if [ ! -d ".hg" ]; then
  return
fi

Как мне изменить это, чтобы проверить, существует ли .hg в текущем каталоге или в каталоге parent / ancestor? Я думаю, что если это не вариант, такой как -d, то решение будет рекурсивным.

Ответы [ 3 ]

2 голосов
/ 24 февраля 2012

Я бы просто изменил этому:

if ! hg status > /dev/null 2>&1; then
    return
fi

hg status должно быть успешным, если вы находитесь где-то внутри ртутного дерева.

1 голос
/ 24 февраля 2012

Выполняет поиск в предыдущих каталогах для каталога, указанного в 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
0 голосов
/ 25 февраля 2012

Еще один способ сделать это - заключить тест в цикл while, который продолжается до тех пор, пока текущим рабочим каталогом не будет /, и в cd .. после проверки наличия каталога .hg.

...