Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Victor Wagner
On Wed, 11 Mar 2020 15:58:12 +0300
Dmitry Semyonov  wrote:

> On Wed, 11 Mar 2020 at 14:50, Victor Wagner wrote:

> 
> Это всё понятно, но уже не укладывается в простой совет для
> начинающих: "встретил трудную конструкцию - меняй shell на любой
> универсальный скриптовый язык". Как выясняется, любой не всегда

На самом деле совет такой - "встретил трудную конструкцию - перестань
относиться к этому как  к наколеночной поделке, и начинай разрабатывать
это как ПРОГРАММУ. С применением всех требуемых техник, приемов и
методологий." (version control, embedded documentation, unit testing
etc).

Скорее всего язык при этом тоже придется поменять. 

-- 



Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Igor Savlook




On 11/03/2020 15.56, Victor Wagner wrote:

On Wed, 11 Mar 2020 15:41:52 +0300
Igor Savlook  wrote:



Ну если бы на perl не решалась одна задача трилионом способов то
можно былоб и подучить. В ином случае просто приходится сидеть и
втыкать какой же метом решения задачи взял тот или иной индивид в


Так надо учить по Camel Book и Panthera Book, а не по творчеству
непонятных индивидов, даже если это творчество собрано под обложкой  с
изображением муфлона.


Да я и не спорю, вам осталось убедить в этом остальных писателей на 
перле. И вот тогда заживем, а пока..





своем коде. Я не спорю задачу можно решать не одним способом но на
языке это сказывается в плохую сторону, особенно в перле где не 2, не
3 а десятки способов имеются. Мне кажется по этому его и не хотят
учить.
  
Вообще, по моему опыту написать удобочитаемую программу на perl намного

проще, чем переносимую на C или C++.
--





Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Dmitry Semyonov
On Wed, 11 Mar 2020 at 14:50, Victor Wagner wrote:
>
> On Wed, 11 Mar 2020 14:38:13 +0300
> Dmitry Semyonov  wrote:
>
> > On Wed, 11 Mar 2020 at 11:59, Victor Wagner wrote:
> >
> > > А вообще крайне рекомендую, если вдруг выясняется, что для
> > > формированмия команды в шелловском скрипте используется более двух
> > > уровней подстановок, плюнуть  и переписать его на perl, python,
> > > ruby, lua - любом другом скриптовом языке.
> >
> > После буквального следования таким советам кому-то потом придётся
> > ломать голову над сотней-другой строк питоновской лапши вместо десятка
> > строк понятных шелловских команд. Часто лучше один раз разобраться и
>
> Так не надо писать лапшу. На любом языке можно написать плохой код.
 [...]
> Если это делается парой десятков строк на awk, то примерно в то же
> количество строк это делается и на perl.
 [...]
> Просто перл надо ВЫУЧИТЬ. В нем есть все, что есть в awk, sed и tr, и
> многое-многое другое. А то приходят люди с визуалбейсковским
> бэкграундом и начинают текст обрабатывать на perl с помощью функций
> substr и index.

Это всё понятно, но уже не укладывается в простой совет для
начинающих: "встретил трудную конструкцию - меняй shell на любой
универсальный скриптовый язык". Как выясняется, любой не всегда
подходит для конкретной задачи, а если и подходит, то позволяет
применить себя таким образом, что лучше бы всё оставили на shell +
coreutils + sed/grep/awk. Да и граблей в каждом языке хватает, даже
если ты не новичок. Только вот начинающие этого часто не понимают, а
более опытным такие советы, как бы и ни к чему.

-- 
...Bye..Dmitry.


Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Victor Wagner
On Wed, 11 Mar 2020 15:41:52 +0300
Igor Savlook  wrote:


> Ну если бы на perl не решалась одна задача трилионом способов то
> можно былоб и подучить. В ином случае просто приходится сидеть и
> втыкать какой же метом решения задачи взял тот или иной индивид в

Так надо учить по Camel Book и Panthera Book, а не по творчеству
непонятных индивидов, даже если это творчество собрано под обложкой  с
изображением муфлона.

> своем коде. Я не спорю задачу можно решать не одним способом но на
> языке это сказывается в плохую сторону, особенно в перле где не 2, не
> 3 а десятки способов имеются. Мне кажется по этому его и не хотят
> учить.
 
Вообще, по моему опыту написать удобочитаемую программу на perl намного
проще, чем переносимую на C или C++.
--



Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Igor Savlook




On 11/03/2020 15.10, Sergey Matveev wrote:

*** Victor Wagner [2020-03-11 14:50]:

Просто перл надо ВЫУЧИТЬ. В нем есть все, что есть в awk, sed и tr, и
многое-многое другое. А то приходят люди с визуалбейсковским
бэкграундом и начинают текст обрабатывать на perl с помощью функций
substr и index.


Полностью поддерживаю! Плюс это всё зачастую в Perl ещё можно и в
one-liner писать, заменяя sed/tr/whatever. Плюс Perl везде одинаков (+-)
и его скрипты будут одинаково работать как под BSD, так и под GNU
системами, в отличии от sed/grep/awk, GNU версии которых отличаются от
BSD ощутимо. Плюс из коробки, без дополнительных модулей, в нём и с
файлами и с сокетами можно вполне себе работать, что тоже может
пригодиться. Плюс он относительно легковесен (учитывая кучу возможностей
в его единственном бинарнике!) и я встречал из коробки его даже в
OpenWRT каком-нибудь (ну такие вот дистрибутивы с ним попадались), да и
зачастую он в любом дистрибутиве идёт из коробки, в отличии от
Python/Lua/Ruby/whatever. А нежелание людей изучить ровно этот один
инструмент мне не понятны, тем более, когда при этом выбирают кучу
других, зачастую тоже их не зная, да ещё и страдая от несовместимости
реализаций (bsd vs gnu).



Ну если бы на perl не решалась одна задача трилионом способов то можно 
былоб и подучить. В ином случае просто приходится сидеть и втыкать какой 
же метом решения задачи взял тот или иной индивид в своем коде. Я не 
спорю задачу можно решать не одним способом но на языке это сказывается 
в плохую сторону, особенно в перле где не 2, не 3 а десятки способов 
имеются. Мне кажется по этому его и не хотят учить.




Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Victor Wagner
On Wed, 11 Mar 2020 15:10:36 +0300
Sergey Matveev  wrote:

> *** Victor Wagner [2020-03-11 14:50]:
> >Просто перл надо ВЫУЧИТЬ. В нем есть все, что есть в awk, sed и tr, и
> >многое-многое другое. А то приходят люди с визуалбейсковским
> >бэкграундом и начинают текст обрабатывать на perl с помощью функций
> >substr и index.   
> 
> Полностью поддерживаю! Плюс это всё зачастую в Perl ещё можно и в
> one-liner писать, заменяя sed/tr/whatever. Плюс Perl везде одинаков

Особенно с тех пор, как отказались от идеи выпуска Perl 6, который
должен был отличаться от Perl 5 сильнее, чем Python2 от Python 3 и
решили что то, что разрабатывалось под именем perl 6 это все же
отдельный язык.

> (+-) и его скрипты будут одинаково работать как под BSD, так и под GNU
> системами, в отличии от sed/grep/awk, GNU версии которых отличаются от
> BSD ощутимо. Плюс из коробки, без дополнительных модулей, в нём и с

Это вы еще Solaris не видели с его /usr/bin, /usr/xpg4/bin, /usr/ucb,
/usr/ccs/bin и
/opt/csw и /usr/sfw, в каждом из которых свой sed/grep/awk.

Да еще awk
бывает mawk, gawk, nawk. Первый для котов, второй для собак, а третий
вообще для русалок.

В этом плане, конечно Ларри, сумевший, в отличие от Гвидо, избежать
альтернативных реализаций - велик.

> попадались), да и зачастую он в любом дистрибутиве идёт из коробки, в
> отличии от Python/Lua/Ruby/whatever. А нежелание людей изучить ровно

Ну как сказать. Вот в каких-то андроидах мне как раз попадался python
(правда допотопный и без стандартной библиотеки), а perl не было.

> этот один инструмент мне не понятны, тем более, когда при этом
> выбирают кучу других, зачастую тоже их не зная, да ещё и страдая от
> несовместимости реализаций (bsd vs gnu).

Но вообще, по опыту как собственной разработки, так и использования
чужих больших проектов на perl,  могу сказать, что у него, как и у
shell есть свой предел.

Но если предел разумного размера шелловского скрипта - это порядка
экрана, то предел разумного размера перлового скрипта, это порядка
тысячи-двух строк не считая pod-документации.

Если проект разрастается сильнее, значит perl в качестве инструмента
выбран неправильно. 

А вот у питона предел значительно больше. Особенно если слушаться
pylint и аккуратно делить проект на модули. Проектов на Lua я видел
гораздо меньше, но те, которые видел заставляют задуматься.

-- 






Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Sergey Matveev
*** Victor Wagner [2020-03-11 14:50]:
>Просто перл надо ВЫУЧИТЬ. В нем есть все, что есть в awk, sed и tr, и
>многое-многое другое. А то приходят люди с визуалбейсковским
>бэкграундом и начинают текст обрабатывать на perl с помощью функций
>substr и index. 

Полностью поддерживаю! Плюс это всё зачастую в Perl ещё можно и в
one-liner писать, заменяя sed/tr/whatever. Плюс Perl везде одинаков (+-)
и его скрипты будут одинаково работать как под BSD, так и под GNU
системами, в отличии от sed/grep/awk, GNU версии которых отличаются от
BSD ощутимо. Плюс из коробки, без дополнительных модулей, в нём и с
файлами и с сокетами можно вполне себе работать, что тоже может
пригодиться. Плюс он относительно легковесен (учитывая кучу возможностей
в его единственном бинарнике!) и я встречал из коробки его даже в
OpenWRT каком-нибудь (ну такие вот дистрибутивы с ним попадались), да и
зачастую он в любом дистрибутиве идёт из коробки, в отличии от
Python/Lua/Ruby/whatever. А нежелание людей изучить ровно этот один
инструмент мне не понятны, тем более, когда при этом выбирают кучу
других, зачастую тоже их не зная, да ещё и страдая от несовместимости
реализаций (bsd vs gnu).

-- 
Sergey Matveev (http://www.stargrave.org/)
OpenPGP: CF60 E89A 5923 1E76 E263  6422 AE1A 8109 E498 57EF


signature.asc
Description: PGP signature


Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Victor Wagner
On Wed, 11 Mar 2020 14:38:13 +0300
Dmitry Semyonov  wrote:

> On Wed, 11 Mar 2020 at 11:59, Victor Wagner wrote:
> 
> > А вообще крайне рекомендую, если вдруг выясняется, что для
> > формированмия команды в шелловском скрипте используется более двух
> > уровней подстановок, плюнуть  и переписать его на perl, python,
> > ruby, lua - любом другом скриптовом языке.  
> 
> После буквального следования таким советам кому-то потом придётся
> ломать голову над сотней-другой строк питоновской лапши вместо десятка
> строк понятных шелловских команд. Часто лучше один раз разобраться и

Так не надо писать лапшу. На любом языке можно написать плохой код.

Да, скорее всего код на более низкоуровневом языке (а perl и python -
более низкоуровневые языки, чем shell), окажется более объемным. Но от
от этого он не обязательно станет менее читаемым. 

> 
> Как пример ложного понимания универсальности "любых других скриптовых
> языков" можно привести обработку структурированного текста. То, что на
> awk делается максимум парой десятков строк понятного кода, часто
> превращают в неудобоваримый алгоритм на 100+ строк универсального
> языка.

Если это делается парой десятков строк на awk, то примерно в то же
количество строк это делается и на perl. Более того, специально для 
для решения этой задачи автор перла написал a2p.

Просто перл надо ВЫУЧИТЬ. В нем есть все, что есть в awk, sed и tr, и
многое-многое другое. А то приходят люди с визуалбейсковским
бэкграундом и начинают текст обрабатывать на perl с помощью функций
substr и index. 

Плюс к этому есть стандартные библиотечные модули для обработки
основных структорированных форматов, авторы которых предусмотрели
разные странные случаи, о которых у большинства писателей наколеночных
скриптов даже мысли не возникает, пока они лбом об эти грабли не
стукнутся.
--





Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Dmitry Semyonov
On Wed, 11 Mar 2020 at 11:59, Victor Wagner wrote:

> А вообще крайне рекомендую, если вдруг выясняется, что для формированмия
> команды в шелловском скрипте используется более двух уровней
> подстановок, плюнуть  и переписать его на perl, python, ruby, lua -
> любом другом скриптовом языке.

После буквального следования таким советам кому-то потом придётся
ломать голову над сотней-другой строк питоновской лапши вместо десятка
строк понятных шелловских команд. Часто лучше один раз разобраться и
написать хороший комментарий к не совсем очевидному месту в
шелл-скрипте, чем сразу кидаться его переписывать на более развитом
скриптовом языке. Тут больше зависит от личного опыта, знания
доступных инструментов и от конкретной задачи. Нечитаемый и
неподдерживаемый код можно написать на чём угодно.

Как пример ложного понимания универсальности "любых других скриптовых
языков" можно привести обработку структурированного текста. То, что на
awk делается максимум парой десятков строк понятного кода, часто
превращают в неудобоваримый алгоритм на 100+ строк универсального
языка.

-- 
...Bye..Dmitry.


Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Victor Wagner
On Wed, 11 Mar 2020 10:03:29 +0100
Nikolai Kondratiev  wrote:

> Спасибо, действительно - воспользуюсь perl.
> 

Кстати, вот еще рекомендую недавний пост Эрика Раймонда на эту тему


http://esr.ibiblio.org/?p=8622
-- 



Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Evgeny Yurkin
Привет, 
так ? 

PRM="-eo euser"   
CMD="ps $PRM"  
echo $CMD
ps -eo euser
 $CMD

В письме от среда, 11 марта 2020 г. 15:42:33 +07 пользователь Nikolai 
Kondratiev написал:
> Привет всем!
> 
> Мне нужно сформировать и выполнить в скрипте команду вида
> 
>  ccc 'xxx yyy'
> 
> т.е команду с одним аргументом, в котором есть пробел.
> 
> Следующий скрипт:
> 
> set -x
> PRM="xxx yyy"
> CMD="ccc $PRM"
> ccc $PRM
> ccc "$PRM"
> echo $CMD
> $CMD
> CMD="ccc '$PRM'"
> $CMD
> 
> работает только в строчке:
> 
>  ccc "$PRM"
> 
> Последние строчки работают неправильно:
> 
> # ./test2
> + PRM='xxx yyy'
> + CMD='ccc xxx yyy'
> + ccc xxx yyy
> ./test2: line 5: ccc: command not found
> + ccc 'xxx yyy'
> ./test2: line 6: ccc: command not found
> + echo ccc xxx yyy
> ccc xxx yyy
> + ccc xxx yyy
> ./test2: line 8: ccc: command not found
> + CMD='ccc '\''xxx yyy'\'''
> + ccc ''\''xxx' 'yyy'\'''
> ./test2: line 10: ccc: command not found
> 
> Мне нужно достаточно сложное формирование команды.
> 
> Есть идеи как можно сформировать переменную $CMD, чтбы строка
> 
> $CMD
> выполнила команду
> ccc 'xxx yyy'
> 
> ?
> 
> Николай
> 


-- 

Best regards
Evgeny Yurkin
Siberian Health Inc


Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Nikolai Kondratiev

Спасибо, действительно - воспользуюсь perl.


Am 11.03.2020 um 09:51 schrieb Victor Wagner:

On Wed, 11 Mar 2020 09:42:33 +0100
Nikolai Kondratiev  wrote:


Привет всем!

Мне нужно сформировать и выполнить в скрипте команду вида

      ccc 'xxx yyy'

т.е команду с одним аргументом, в котором есть пробел.

Нужно представить себе, как работает интерпретатор - он берет строку,
и  начинает ее разбирать. Сколько проходов по строке сделает
интерпретатор, столько нужно и пар кавычек ставить, поскольку каждый
проход одну снимет.

А вообще крайне рекомендую, если вдруг выясняется, что для формированмия
команды в шелловском скрипте используется более двух уровней
подстановок, плюнуть  и переписать его на perl, python, ruby, lua -
любом другом скриптовом языке.

--



Re: Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Victor Wagner
On Wed, 11 Mar 2020 09:42:33 +0100
Nikolai Kondratiev  wrote:

> Привет всем!
> 
> Мне нужно сформировать и выполнить в скрипте команду вида
> 
>      ccc 'xxx yyy'
> 
> т.е команду с одним аргументом, в котором есть пробел.

Нужно представить себе, как работает интерпретатор - он берет строку,
и  начинает ее разбирать. Сколько проходов по строке сделает
интерпретатор, столько нужно и пар кавычек ставить, поскольку каждый
проход одну снимет.

А вообще крайне рекомендую, если вдруг выясняется, что для формированмия
команды в шелловском скрипте используется более двух уровней
подстановок, плюнуть  и переписать его на perl, python, ruby, lua -
любом другом скриптовом языке.

--



Прошу помощи в bash-скрипт - кавычки

2020-03-11 Пенетрантность Nikolai Kondratiev

Привет всем!

Мне нужно сформировать и выполнить в скрипте команду вида

    ccc 'xxx yyy'

т.е команду с одним аргументом, в котором есть пробел.

Следующий скрипт:

set -x
PRM="xxx yyy"
CMD="ccc $PRM"
ccc $PRM
ccc "$PRM"
echo $CMD
$CMD
CMD="ccc '$PRM'"
$CMD

работает только в строчке:

    ccc "$PRM"

Последние строчки работают неправильно:

# ./test2
+ PRM='xxx yyy'
+ CMD='ccc xxx yyy'
+ ccc xxx yyy
./test2: line 5: ccc: command not found
+ ccc 'xxx yyy'
./test2: line 6: ccc: command not found
+ echo ccc xxx yyy
ccc xxx yyy
+ ccc xxx yyy
./test2: line 8: ccc: command not found
+ CMD='ccc '\''xxx yyy'\'''
+ ccc ''\''xxx' 'yyy'\'''
./test2: line 10: ccc: command not found

Мне нужно достаточно сложное формирование команды.

Есть идеи как можно сформировать переменную $CMD, чтбы строка

$CMD
выполнила команду
ccc 'xxx yyy'

?

Николай