LINUX.ORG.RU

bash - простой скрипт чтение строк файла

 


0

2

Всем привет!

написал небольшой скрипт, который читает строки из файла и запускает поиск в текущей директории по найденной строке.

проблема в том, что find ничего не находит (не выводит)

не могу понять почему

разработку веду в win, cygwin, bash, emacs

files.txt имеет unix кодировку

#!/usr/bin/bash

FILE="files.txt"

while read -r line; do
    echo "$line"
    result=$(find . -name "$line")
    echo "result: $result"
done < "$FILE"

files.txt содержит имена файлов для поиска



Последнее исправление: dark-initr0 (всего исправлений: 1)
Ответ на: комментарий от dark-initr0

не понял почему разметка кода не работает, хотя вроде добавил тэги…

Потому, что сейчас модно в markdown.

Kroz ★★★★★
()

while read -r line; do

while IFS= read -r line; do
чтобы нормально обрабатывалмсь строки, начинающиеся с пробела.

teod0r ★★★★★
()

find — говно, используй find|grep, проще будет жить.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 1)

А вот это result=$(find . -name "$line") не код завершения программы разве возвращает?
Отвечу себе: нет.

Я протестировал у себя этот скрипт ТС и он работает без каких-либо изменений. Так что не очень понятно, что у ТС не так. УМВР.

PeleWin
()
Последнее исправление: PeleWin (всего исправлений: 1)

Вы просто find без скрипта проверяли? А то -name как бы регистрозависимый, а в винде есть ключ ObCaseInsensitive...

mky ★★★★★
()

Потому что $() выполняет процесс в форке и там нет твоей переменной. Я не помню как я это решал. Попробуй export.

Если я не путаю случай.

targitaj ★★★★★
()
Последнее исправление: targitaj (всего исправлений: 1)
Ответ на: комментарий от targitaj

Кажется, путаю.

cat test2.sh ; echo; ./test2.sh 
#!/usr/bin/bash

FILE="files.txt"

while read -r line; do
    echo "$line"
    result=$(echo "$line")
    echo "result: $result"
done < "$FILE"

1
result: 1
2
result: 2
3
result: 3
4
result: 4
5
result: 5
targitaj ★★★★★
()

всем большое спасибо за предложенные варианты решения.

при отладке обратил внимание на присутствие \r в конце строки из читаемого файла (она является названием файла, который ищется)

вот такая строчка при отладке

++ echo $'1.txt\r'

сделал удаление этого символа и скрипт заработал

line=$(echo "$line" | sed s/\\r//g)
dark-initr0
() автор топика
Ответ на: комментарий от dark-initr0

Удалять все \r из файлов можно с помощью программы dos2unix (можно как конвертировать файлы на диске, так и фильровать потоки)

annulen ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.