Guest Posted May 12, 2005 Report Posted May 12, 2005 Можно ли процедура-shell рекурсивно вызывать сама себя? Для примера, как сделать обход текущего каталога и всех его подкатологов с выводом числа подкатологов и файлов в каждом с помощью рекурсии, без функций? Quote
pele Posted May 13, 2005 Report Posted May 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 Постоянно выводит имя первого встретившегося подкаталога. В чём проблема? Quote
allez Posted May 16, 2005 Report Posted May 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 Quote
pele Posted May 17, 2005 Report Posted May 17, 2005 Спасибо за советы! Особенно за find - очень удобно! Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.