[Comm] Re: [Comm] извращения с find и shell - кто неправ?
ASA
=?iso-8859-1?q?llb_=CE=C1_udm=2Eru?=
Вс Ноя 17 00:17:11 MSK 2002
Hello Andrew,
Sunday, November 17, 2002, 12:19:07 AM, you wrote:
AG> find . -type f -exec echo {} \; -exec sh -c ' N="{}" ;
AG> /bin/echo "N=$N" ' \;
AG> $ ./test_f
AG> ./тестовый~$файл
AG> N=./тестовый~
AG> я почему-то думал, что должно работать... Не подскажете, это
AG> действительно ошибка и надо в BTS, или я хочу невозможного по
AG> определению?
А что тут неправильного в реакции компа?
N действительно содержит строку "./тестовый~"
Первое echo выводит все как полагается, потому что find вызывает
echo напрямую без помощи sh
а второй -exec вызывает sh и его параметры выглядят так:
sh -c N=./тестовый~$файл ; /bin/echo "N=$N"
при парсинге этих параметров sh не находит переменной "$файл" и
подставляет пустую строку. Во всем этом можешь убедиться,
подставив ps f вместо /bin/echo, и сделав простое тестовое имя
файла из латинских букв - ps на него ругаться не будет.
Короче, лечить надо заменой N="{}" на N='{}'
Вот так у меня сработало. обрати внимание на порядок
последних " и '
find . -type f -exec echo {} \; -exec sh -c " N='{}' ;
/bin/echo "'N=$N' \;
--
Best regards,
ASA mailto:llb на udm.ru
Подробная информация о списке рассылки community