Intereting Posts

Рекурсивный скрипт вызова

Я пытаюсь создать скрипт, который будет перечислять все файлы и каталоги в данном каталоге. Я хочу, чтобы этот скрипт вызывал себя, в конце показывал все файлы и каталоги. Я знаю, что вы можете легко сделать это с помощью find , но я хочу практиковать рекурсивные скрипты , и я не знаю, почему мой рекурсивный данный параметр не то, что я ожидал, это значение не меняется.

for source in `find $1 -maxdepth 1 -type d,f` do if [ -f $source ]; then echo "`basename $source` is a file" fi if [ -d $source ]; then echo "`basename $source` is a directory" . Script.sh $source fi done 

Следующей линией является виновник:

 . Script.sh $source 

Хотя вы, возможно, могли бы сделать рекурсию таким образом, это затрудняет рассуждение, потому что переменные, измененные на следующий уровень рекурсии, также изменяются в вызывающем. Возможно, вы просто хотите вызвать его без поиска:

 Script.sh $source 

Или, еще лучше:

 "$0" "$source" 

Однако надежно получить исходный скрипт во всех случаях немного сложно. Гораздо лучше использовать функции для рекурсии (в Bash):

 function f() { ... f different_args ... } 

И объявить любые переменные, используемые в f как local чтобы они не были мутированы рекурсивным вызовом f .