Пока делаю, сделал управление потоком в bash - PullRequest
0 голосов
/ 25 сентября 2011

Может кто-нибудь объяснить поток управления следующего сценария bash?

while IFS= read -r file
do 
rm -rf "$file"
done < todelete.txt

Насколько я понимаю, это произойдет:

IFS не будет назначено ничего.Команда rm -rf ничего не делает, потому что ее аргумент, переменная $ file, пуст / пуст / пуст.Затем два предыдущих шага будут повторяться бесконечно.

Очевидно, что это не так, потому что скрипт работает так, как ожидалось;он удаляет все файлы, перечисленные в todelete.txt.

Я полагаю, что объяснение заключается в "done

Ответы [ 2 ]

2 голосов
/ 25 сентября 2011

Все while ... done обрабатывается как одна команда, которой на вход подается файл todelete.txt.

Объект while IFS= read -r file читает строки из этого входного файла до EOF, присваивая каждую строку переменной $file, и каждая итерация цикла удаляет этот файл.

1 голос
/ 25 сентября 2011

Перенаправление после done влияет на поток ввода read.Поэтому read будет работать с содержимым todelete.txt, а не stdin.

. Для получения дополнительной информации вы должны прочитать раздел Внутренние команды руководства Bash.(Просмотрите непосредственно пример 15-7.)

...