( Это должен быть комментарий, но он слишком большой.)
Для тех, кто любит экспериментировать:
Создайте скрипт со списком переданных позиционных параметров, назовите его list_positional_parameters.sh
.
#!/bin/bash
# http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_07.html
# Try globbing patterns, e.g. "X[[:digit:]][[:digit:]]" to see what happens
if [ $# -lt 1 ]; then
echo "Usage: $0 and then at least one parameter"
exit 1
fi
counter=1
while (($#)); do
echo "$counter = '$1'"
# pop positional argument 1 off the stack of positional arguments
shift
(( counter++ ))
done
Запустите find
с ним в каком-нибудь каталоге $dir:
find "$dir" -exec./list_positional_parameters.sh '{}' ';' | less
Как и ожидалось, во всех вызовах есть только один параметр — имя файла, независимо от того, есть ли в его имени пробелы или нет.
Проблема здесь заключалась в том, что окончания строк для bash (Linux )и windows разные, LF и CRLF соответственно (Я не слишком уверен, так как это все для меня новое ). Поэтому, когда я создал файл с элементами, разделенными строками в python, сценарий bash не мог прочитать его очень хорошо, поскольку созданный файл имел окончания CRLF, а сценарий bash читал только LF, делая URL-адреса бесполезными, потому что у них был CR концовка, которой не должно было быть. Я не знал, как решить эту проблему с помощью кода bash, но я создал файл (с помощью python ), в котором каждый элемент был разделен подчеркиванием "_", и добавил последний элемент, n, просто чтобы мне никогда не приходилось иметь дело с окончаниями строк. Затем я просто запустил цикл for в bash, повторяя каждый элемент, разделенный символом подчеркивания, кроме последнего элемента. Это решило проблему.