LINUX.ORG.RU
ФорумAdmin

записать данные из субшелла в переменную

 ,


0

1

Что то всё таки не получается у меня поработать с файлами в скрипте.

Есть код:


i=0

find "/dir" -type f -print0 | while read -r -d '' per1
do
   per2="${per1##*/}"
   (( i++ ))
   dir[$i]="$per2"
done

printf "%s\n" "${dir[@]}"

printf не выведет ничего, так как read запускает свой субшелл и все данные останутся там, пробовал всякие перенаправления ничего не получается. Записывать в файл на диск нельзя. export не поможет так как он экспортирует для потомков, а не для родителей. Можно как то передать данные в переменную-массив в самом скрипте не прибегая к записи в файл на дик?

Если заменить на:


i=0

for per1 in $(find "/dir" -type f)
do
   per2="${per1##*/}"
   (( i++ ))
   dir[$i]="$per2"
done

printf "%s\n" "${dir[@]}"

То тогда если будут файлы с названиями «*, ? » и т.д. то почему то find заносит в переменную один и тот же файл несколько раз, просто команда find отрабатывает нормально, с for-ом получается какая то чепуха.

Вот такая конструкция:


i=0

for per1 in "/dir/*" "/dir/.*" -type f
do
   per2="${per1##*/}"
   (( i++ ))
   dir[$i]="$per2"
done

printf "%s\n" "${dir[@]}"

Работает просто превосходно, но совсем не просто сделать рекурсию по вложенным папкам.

★★

find "/dir" -type f -print0 | while read per1
do
  ...
done
anonymous
()
while IFS= read -rd '' per1; do
    # ...
done < <(find /dir -type f -print0)
shopt -s globstar dotglob
for per1 in /dir/**; do
    # ...
done
shdown
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.