Гость Опубликовано 12 мая, 2005 Жалоба Опубликовано 12 мая, 2005 Можно ли процедура-shell рекурсивно вызывать сама себя? Для примера, как сделать обход текущего каталога и всех его подкатологов с выводом числа подкатологов и файлов в каждом с помощью рекурсии, без функций? Цитата
pele Опубликовано 13 мая, 2005 Жалоба Опубликовано 13 мая, 2005 Вот процедура, выполняющая распечатку полных имен всех вложенных подкаталогов каталога, заданного в качестве аргумента if test $#=0 then cat=`pwd` else oldcat=`pwd` cd $1 cat=`pwd` cd $oldcat fi echo"Directory list from $cat" ls $cat |\ while read i do if test -d $cat/$i then lsdir $cat/$i fi done Постоянно выводит имя первого встретившегося подкаталога. В чём проблема? Цитата
allez Опубликовано 16 мая, 2005 Жалоба Опубликовано 16 мая, 2005 Во-первых, не забывайте про пробелы в условных операторах: test $# = 0 Во-вторых, использовать для имен переменных имена команд ("cat") - по меньшей мере, дурной тон. Используйте хотя бы другой регистр ("CAT") В-третьих, читабельность исходного кода необходимо улучшать отступами. В-четвертых, первый условный оператор следовало бы сделать попроще: if test $# = 0 then CAT=`pwd` else CAT=$1 fi или даже так: if [ "$#" == "0" ] && CAT=`pwd` || CAT=$1 В-пятых, и, возможно, в главных, все, что делает ваша процедура, можно уместить в одну строку: find <имя_каталога> -type d Цитата
pele Опубликовано 17 мая, 2005 Жалоба Опубликовано 17 мая, 2005 Спасибо за советы! Особенно за find - очень удобно! Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.