ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [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