-1
#!/bin/sh
file_list=`find . -type f`
IFS=$(echo) #this enables for loop to break on newline
for file_ in $file_list; do
file $file_
done
Этот сценарий оболочки удивительно сообщает об этом (File name too long)
. Я предполагаю, что скрипт подает file
с 3 раза $file_list
!!!Почему команда файла в цикле for ведет себя так смешно
Но если я изменю команду file
с простым echo
, тогда скрипт будет печатать все файлы в текущей строке каталога за строкой, которая ожидается.
Вы устанавливаете 'IFS' для нулевого и отключающего разбиение слов. Таким образом, 'file_' содержит * полный * вывод' find'. Для командной строки это будет слишком долго. 'echo'« работает », потому что новые строки отображают его. Попробуйте использовать 'printf% s '$ file_" 'или' declare -p file_' в цикле и посмотреть, что вы получаете. –
Также см. [Bash FAQ 001] (http://mywiki.wooledge.org/BashFAQ/001) о том, как правильно читать линейные данные из потока. И прочитайте [Не читайте строки для] (http://mywiki.wooledge.org/DontReadLinesWithFor), чтобы понять, почему это плохая идея. –
Возможно, вы использовали 'IFS = $ (echo)' (замена команды, а не расширение параметра). Но это все еще плохая идея. – chepner