Это немного связано с моим вопросом здесь. В процессе нахождения источника проблемы я пытался понять то, что делается в initrd. Мое предположение - то, что Вы говорите о nash
- но я не смог найти много об этом.
Можно просто сказать mkdir
сделать пути с -p
переключатель:
$ mkdir -p /dir1/dir2/dir3/dir4
выборка от mkdir
страница справочника
-p, --parents
no error if existing, make parent directories as needed
Я нашел решение, с помощью cut
и a while
- цикл
#!/bin/bash
RUNDIR=$1
n=2
TMPDIR=
while [ $(echo $RUNDIR | cut -d '/' -f$(printf $n)) ]; do
TMPDIR=$TMPDIR'/'$(echo $RUNDIR | cut -d '/' -f$(printf $n))
if [ -a $TMPDIR ]; then
echo $TMPDIR' exists'
else
echo $TMPDIR' does not exist; creating directory...'
mkdir $TMPDIR
fi
n=$(printf $(($n + 1)))
done
Существует ли более компактный способ сделать это?
test -a "$TMPDIR" || mkdir "$TMPDIR"
если Вам не нужен вывод также. Финал n
инкремент может быть записан n=$(($n + 1))
, никакая потребность в printf
там то, что я вижу. При помощи basename
и dirname
Вы не должны анализировать путь сами. (И всегда заключайте свои переменные в кавычки, если Вы не положительны, что они никогда не будут содержать пробелы, и несмотря на это, необходимо заключить им в кавычки так или иначе на всякий случай.) И даже с этим, mkdir -p
как указано @slm, вероятно, лучший ответ. :)
– a CVn
20.09.2013, 15:31
while
цикл. – MBR 20.09.2013, 15:08