[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