LINUX.ORG.RU

Проверка существования директорий в bash

 ,


0

1

Приветствую, Лор! Всё думаю-копаюсь, но ничего не могу придумать. На Bash начал писать недавно, и почти вообще ничего не знаю. Есть скрипт, который получает некое количество наименования директорий через запятую. Допустим, директории blablabla,kokoko,mumumu, и нужно проверить, существуют ли они вообще. Некоторые из них, а то может и все, лежат в каком-нибудь обозначенном каталоге. Вспомнил, что каталоги эти создавать можно с помощью такого вида команды:

mkdir /other/{blablabla,kokoko,mumumu}

И список этих каталогов содержит переменная BLAH, например. И всё успешно создаётся. Подумал, что можно сделать так же с помощью if [[ -d ]], то есть пишу что-то вроде:

if [[ -d /other/{$BLAH } ]]; и прочее ...

Но, к сожалению, это не работает? Спрашиваю у тебя, большой разум Лора, как можно решить эту проблему? Буду очень благодарен любому, кто отпишет.

test -d принимает ровно один аргумент.

</thread>

anonymous
()
for i in /other/{$BLAH}; do
    if [[ -d "$i" ]]; then
        ...
    fi
done
Black_Shadow ★★★★★
()
Ответ на: комментарий от bl

Пишет что:

/other/blablabla.com,ololo.ru not exists

Директорий почти всегда больше двух-трёх. :)

blablacon
() автор топика
Ответ на: комментарий от Black_Shadow

Йуху, спасибо, друже! Сильно помог, большое спасибо!:)

blablacon
() автор топика
Ответ на: комментарий от Black_Shadow

Пойду читать книги по bash, sed, и всем ним. Спасибо ещё раз!

blablacon
() автор топика
Ответ на: комментарий от Black_Shadow

ага.

вот так заработало:
for d in `eval echo /dir/{$BLAH}` ; do echo $d ; done

но использование subshell и eval считается плохо.

bl ★★★
()
Ответ на: комментарий от Black_Shadow

for i in `echo $BLAH | sed -e s/,/' '/g`; do

IFS=,
for i in $BLAH; do
akk ★★★★★
()
Ответ на: комментарий от Black_Shadow

Зачем такой изврат? В bash есть массивы.

То есть:

BLAH=("blablabla" "kokoko" "mumumu")
for i in ${BLAH[@]}; do
    if [[ -d "/other/$i" ]]; then
        ...
    fi
done

raven_cler ★★
()
Ответ на: комментарий от Black_Shadow

echo $BLAH | sed -e s/,/' '/g

echo ${BLAH//,/' '}

хотя ниже написали правильно про массивы

anonymous
()
Ответ на: комментарий от zolden

Можно было бы и так, но с этими каталогами связана некая конфигурация, и если каталогов нет - значит точно нет и конфигурации, поэтому для меня лучше проверки. :)

blablacon
() автор топика
Ответ на: комментарий от anonymous

Наркоман, здесь речь о списках в bash, которые делаются с помощью {}.

$ echo a{1,2,3}
a1 a2 a3
Сюрприз! Когда же у вас каникулы кончатся... Элементарных вещей не знают, а уже лезут.

Black_Shadow ★★★★★
()
Последнее исправление: Black_Shadow (всего исправлений: 2)
Ответ на: комментарий от Black_Shadow

анон, конечно, тред не читал и лезет

но ты с такими предъявами выглядишь смешно

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.