Гость Опубликовано 12 мая, 2005 Жалоба Поделиться Опубликовано 12 мая, 2005 Можно ли процедура-shell рекурсивно вызывать сама себя? Для примера, как сделать обход текущего каталога и всех его подкатологов с выводом числа подкатологов и файлов в каждом с помощью рекурсии, без функций? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
EL[michlen] Опубликовано 12 мая, 2005 Жалоба Поделиться Опубликовано 12 мая, 2005 Да, конечно. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
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 - очень удобно! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.