* [Comm] извращения с find и shell - кто неправ?
@ 2002-11-16 20:19 Andrew Grechko
2002-11-16 21:00 ` Vitaly Lipatov
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Andrew Grechko @ 2002-11-16 20:19 UTC (permalink / raw)
To: community
Приветствую, коллеги!
Возясь с отладкой скрипта, накопал:
$ cat test_f
#!/bin/sh
find . -type f -exec echo {} \; -exec sh -c ' N="{}" ;
/bin/echo "N=$N" ' \;
пускаем:
$ ./test_f
./~$файл 123
N=./~ 123
./тестовый~$файл
N=./тестовый~
:((
я почему-то думал, что должно работать... Не подскажете, это
действительно ошибка и надо в BTS, или я хочу невозможного по
определению?
--
With best regards,
Andrew Grechko
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Comm] извращения с find и shell - кто неправ?
2002-11-16 20:19 [Comm] извращения с find и shell - кто неправ? Andrew Grechko
@ 2002-11-16 21:00 ` Vitaly Lipatov
2002-11-16 21:20 ` [Comm] Re[2]: " ASA
2002-11-16 23:52 ` Andrew Grechko
2002-11-16 21:17 ` [Comm] " ASA
2002-11-17 16:15 ` Dmitry V. Levin
2 siblings, 2 replies; 8+ messages in thread
From: Vitaly Lipatov @ 2002-11-16 21:00 UTC (permalink / raw)
To: community
On 16 Ноябрь 2002 23:19, Andrew Grechko wrote:
...
> пускаем:
> $ ./test_f
> ./~$файл 123
> N=./~ 123
...
Когда bash встречает конструкцию $текст, он подставляет (в
данном случае - при присвании переменной N)
вместо неё содержимое переменной текст, которая у вас не
определена. Поэтому слова и пропадают. Как экранировать - не
знаю, возможно никак.
>
> я почему-то думал, что должно работать... Не подскажете, это
> действительно ошибка и надо в BTS, или я хочу невозможного по
> определению?
Вы бы хоть написали, чего хотите, и с какой целью создаёте имена
файлов с долларами. Пишите с евро и проблем не будет :)
--
Lav
Виталий Липатов
Санкт-Петербург
GNU! ALT Linux Team! LaTeX! LyX!
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Comm] Re: [Comm] извращения с find и shell - кто неправ?
2002-11-16 20:19 [Comm] извращения с find и shell - кто неправ? Andrew Grechko
2002-11-16 21:00 ` Vitaly Lipatov
@ 2002-11-16 21:17 ` ASA
2002-11-16 23:38 ` Andrew Grechko
2002-11-17 16:15 ` Dmitry V. Levin
2 siblings, 1 reply; 8+ messages in thread
From: ASA @ 2002-11-16 21:17 UTC (permalink / raw)
To: Andrew Grechko
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
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Comm] Re[2]: [Comm] извращения с find и shell - кто неправ?
2002-11-16 21:00 ` Vitaly Lipatov
@ 2002-11-16 21:20 ` ASA
2002-11-16 23:52 ` Andrew Grechko
1 sibling, 0 replies; 8+ messages in thread
From: ASA @ 2002-11-16 21:20 UTC (permalink / raw)
To: Vitaly Lipatov
Hello Vitaly,
Sunday, November 17, 2002, 1:00:30 AM, you wrote:
VL> Когда bash встречает конструкцию $текст, он подставляет (в
VL> данном случае - при присвании переменной N)
VL> вместо неё содержимое переменной текст, которая у вас не
VL> определена. Поэтому слова и пропадают. Как экранировать - не
VL> знаю, возможно никак.
А как же апострофы вместо кавычек?
--
Best regards,
ASA mailto:llb@udm.ru
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Comm] Re: [Comm] извращения с find и shell - кто неправ?
2002-11-16 21:17 ` [Comm] " ASA
@ 2002-11-16 23:38 ` Andrew Grechko
0 siblings, 0 replies; 8+ messages in thread
From: Andrew Grechko @ 2002-11-16 23:38 UTC (permalink / raw)
To: community
17 Ноябрь 2002 00:17, ASA wrote:
<skip>
> Первое 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' \;
Мне как-то понятнее показалось
find . -type f -exec echo {} \; -exec sh -c " N='{}' ;
/bin/echo "'N=$N'" " \;
Спасибо!
--
With best regards,
Andrew Grechko
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Comm] извращения с find и shell - кто неправ?
2002-11-16 21:00 ` Vitaly Lipatov
2002-11-16 21:20 ` [Comm] Re[2]: " ASA
@ 2002-11-16 23:52 ` Andrew Grechko
1 sibling, 0 replies; 8+ messages in thread
From: Andrew Grechko @ 2002-11-16 23:52 UTC (permalink / raw)
To: community
17 Ноябрь 2002 00:00, Vitaly Lipatov wrote:
<skip>
> ...
> Когда bash встречает конструкцию $текст, он подставляет (в
> данном случае - при присвании переменной N)
> вместо неё содержимое переменной текст, которая у вас не
> определена. Поэтому слова и пропадают. Как экранировать - не
> знаю, возможно никак.
Нам показали:))
<skip>
>
> Вы бы хоть написали, чего хотите, и с какой целью создаёте
> имена файлов с долларами. Пишите с евро и проблем не будет :)
Я не создаю! А вот пользователи на самба-сервере - за милую
душу. Кстати, винды тоже, всякие там temporary internet files...
А цель простая - искать по ночам файлы для инкрементной копии,
перекодировать их имена в cp866 и паковать rar' ом, чтобы их
потом на болвани резали. Т.е у меня там несколько куча команд.
Но вроде как вопрос решился, спасибо!.
--
With best regards,
Andrew Grechko
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Comm] извращения с find и shell - кто неправ?
2002-11-16 20:19 [Comm] извращения с find и shell - кто неправ? Andrew Grechko
2002-11-16 21:00 ` Vitaly Lipatov
2002-11-16 21:17 ` [Comm] " ASA
@ 2002-11-17 16:15 ` Dmitry V. Levin
2002-11-18 13:04 ` jin
2 siblings, 1 reply; 8+ messages in thread
From: Dmitry V. Levin @ 2002-11-17 16:15 UTC (permalink / raw)
To: ALT Linux general discussion list
[-- Attachment #1: Type: text/plain, Size: 351 bytes --]
On Sat, Nov 16, 2002 at 11:19:07PM +0300, Andrew Grechko wrote:
> Приветствую, коллеги!
>
> Возясь с отладкой скрипта, накопал:
>
> $ cat test_f
> #!/bin/sh
> find . -type f -exec echo {} \; -exec sh -c ' N="{}" ;
> /bin/echo "N=$N" ' \;
Рекомендую вместо конструкции "find -exec" использовать конструкцию
"find -print0 |xargs -r0".
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Comm] извращения с find и shell - кто неправ?
2002-11-17 16:15 ` Dmitry V. Levin
@ 2002-11-18 13:04 ` jin
0 siblings, 0 replies; 8+ messages in thread
From: jin @ 2002-11-18 13:04 UTC (permalink / raw)
To: community
А еще вопрос по поводу тоже find и shell. Если у меня файлики есть
сохранены в кодировке не кои, то есть видятся как всякие зюзюздю.... Как
бы мне их найти и кодировку на кои поменять. Потыкался, найти и
кодировку полученных имен могу заменить, а вот скопировать их с новыми
именами не получается...Может где примерчик лежит?
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2002-11-18 13:04 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-11-16 20:19 [Comm] извращения с find и shell - кто неправ? Andrew Grechko
2002-11-16 21:00 ` Vitaly Lipatov
2002-11-16 21:20 ` [Comm] Re[2]: " ASA
2002-11-16 23:52 ` Andrew Grechko
2002-11-16 21:17 ` [Comm] " ASA
2002-11-16 23:38 ` Andrew Grechko
2002-11-17 16:15 ` Dmitry V. Levin
2002-11-18 13:04 ` jin
ALT Linux Community general discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
public-inbox-index community
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.community
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git