Ошибка в shell-скрипте для печати древовидной структуры текущей директории

Я написал следующий скрипт:

  #!/bin/bash

if [ $# -eq 0 ]
then
    read current_dir
else
    current_dir=$1
fi

function print_tree_representation ()
{
    for file in `ls -A $1`
    do
        local times_p=$2
        while [ $times_p -gt 0 ]
        do
            echo -n "----"
            times_p=$(( $times_p - 1 ))
        done
        echo $file

        if test -d $file
        then
            local new_path=$1/$file
            local new_depth=$(( $2 + 1 ))

            print_tree_representation $new_path $new_depth        
        fi
    done
}

print_tree_representation $current_dir 0

для печати древовидной структуры каталога, переданного в качестве аргумента. Однако, он не идет дальше второго уровня глубины. Я не могу понять, что не так.

0
20.03.2016, 13:06
1 ответ

Проблема заключается в этой строке:

if test -d $file

$file, который вы извлекли из ls -A, не содержит полного пути. Вы можете исправить это, заменив эту строку на

if test -d "$1/$file"

Есть еще один баг, который заключается в том, что он будет ломаться повсюду, если в имени файла есть пробелы. Заключите имена файлов в кавычки.

2
28.01.2020, 02:35

Теги

Похожие вопросы