1

добрый день

надо передать "составную" команду строкой
"исходный вариант команды" - закомментирован
с набегу/нагуглю не разобрался

понимаю, что непонимаю глубинных смыслов башизма :o)

буду благодарен за волшебные пендили, подсказки, ссылки, мымсли идеи (желательно, без особых извращений современного баша)

спасибо

#!/bin/sh
#///////////////////////////////////////////////////////////////////////////////
cmd()
#///////////////////////////////////////////////////////////////////////////////
{
$CMD
}
#///////////////////////////////////////////////////////////////////////////////

cd $TMP
touch test_image.{iso,img,txt}

#
# исходный вариант
#
#zenity \
#--file-selection --save     \
#--filename=dvd.iso          \
#--file-filter="*.iso *.img" \
#--title="Выбор файла"; exit 1


   X=$'\040'
MASK="*.iso *.img"  ; TITLE="Выбор файла"
MASK="*.iso$X*.img" ; TITLE="Выбор$Xфайла"

CMD="\
zenity \
--file-selection --save     \
--filename=dvd.iso          \
--file-filter=*.iso\ *.img  \
--title=Выбор\ файла        \
"

CMD="\
zenity \
--file-selection --save     \
--filename=dvd.iso          \
--file-filter=*.iso$X*.img  \
--title=Выбор$Xфайла        \
"

CMD="\
zenity \
--file-selection --save     \
--filename=dvd.iso          \
--file-filter=$(echo *.iso$X*.img) \
--title=$(echo Выбор$Xфайла)      \
"

cmd

exit 0

исходные

bash-3.1.017-i486-2
slackware 12.2

2

Почему три команды CMD?
И почему вызов маленькими буквами? - В Linux как в Unix регистр имеет значение.

Fedora 35 KDE.
Linux is great and super! Long live rock'n'roll! Opera and libretto.
По-русски калинка-малинка моя! Люблю оливье и винегрет.
Yours sincerely, wasting away! Salute people!

3 (13.07.2020 17:48:43 отредактировано sunjob)

попробуйте перенести код в скрипт...  ag

p.s. так-то уже подсказали...

p.s.2

Почему три команды CMD?

потому, что, это, типа, попытка подобрать правильную строку команды
ни одна нормально не отработала

И почему вызов маленькими буквами?

а какими он должен быть?

В Linux как в Unix регистр имеет значение

поэтому вызов - маленькими букавами, вызывается функция, определенная в начале ...

еще раз

надо передать "составную" команду строкой
"исходный вариант команды" - закомментирован

4

sunjob пишет:

поэтому вызов - маленькими букавами, вызывается функция, определенная в начале ...

согласен!

вот мануал zenity вам в помощь!
https://help.gnome.org/users/zenity/stable/
https://help.gnome.org/users/zenity/sta … ge.html.ru

Fedora 35 KDE.
Linux is great and super! Long live rock'n'roll! Opera and libretto.
По-русски калинка-малинка моя! Люблю оливье и винегрет.
Yours sincerely, wasting away! Salute people!

5 (13.07.2020 19:22:19 отредактировано sunjob)

зенитя тут постольку поскольку :о)

проблема заключена в 2х строках

надо передать "составную" команду строкой
"исходный вариант команды" - закомментирован

команда может быть любой, с зенитью или без нее, главное, что она "составная",т.е. содержит в себе всяку CENSORED, типа параметры в ковычках (включая пробелы), списки, итд... вот это все "счастье" весьма непросто передать простой строкой ... :о)

6

sunjob пишет:

команда может быть любой, с зенитью или без нее, главное, что она "составная",т.е. содержит в себе всяку CENSORED, типа параметры в ковычках (включая пробелы), списки, итд... вот это все "счастье" весьма непросто передать простой строкой ... :о)

А в bash, кажется, нет ограничений на длину строки.
Тот же PATH передаётся длинной строкой.

Fedora 35 KDE.
Linux is great and super! Long live rock'n'roll! Opera and libretto.
По-русски калинка-малинка моя! Люблю оливье и винегрет.
Yours sincerely, wasting away! Salute people!

7

опять мимо :о)

8 (13.07.2020 22:38:18 отредактировано ValentinK)

sunjob пишет:

команда может быть любой, с зенитью или без нее, главное, что она "составная",т.е. содержит в себе всяку CENSORED, типа параметры в ковычках (включая пробелы), списки, итд... вот это все "счастье" весьма непросто передать простой строкой ... :о)

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

Fedora 35 KDE.
Linux is great and super! Long live rock'n'roll! Opera and libretto.
По-русски калинка-малинка моя! Люблю оливье и винегрет.
Yours sincerely, wasting away! Salute people!

9 (14.07.2020 00:13:32 отредактировано gramozeka)

sunjob пишет:

надо передать "составную" команду строкой

вопрос то в чём?
Надо передать - передавай!
Или русский не родной? Вот из всего написанного совершенно не понятно чего тебе нужно. А уж тем паче попытка изнасилования динозавра (ака Slacware 12!!!!!).
Ты немного сосредоточься, чайку попей, и таки сформулируй вопрос так, чтобы другие понимали чего ты хочешь, а то как в анеке :
"
-Петька пять влево!
-Василий Иваныч, огурцы!
-Что огурцы?
-а что пять влево?"

Параметры в баше передаются как отдельные слова - одно слово один параметр, например:

 Консоль:

script.sh -F 1 Argument

три параметра:
-F
1
Argument
если надо как-то обработать префиксы параметров(например -- перед самим параметром), то это всё возлагается на пейсателя скрипта, обрабатывай как умеешь,...
Если тебе нужно передать в скрипт что-то длинное и нечленораздельное ака "шла маша по шосе! ахтунг! нихт шиссе! Ганс фояр!", то это можно передать как строку(массив) или предварительно загнать это нечто в строковую переменную, а потом разобрать её уже в скрипте как знания позволят...
А все входящие в скрипт переменные, самим скриптом обрабатываются как стандартные локальные(для скрипта) переменные ака $1, $2, $3, $@....
вот почитай для развития(там немного проблемная история, но для понимания пойдёт) http://utyatnishna.ru/info/41074/passin … rs-in-bash
а выглядеть такое будет как-то так:

#!/bin/sh
echo $1
echo $2
echo $3
echo $@
echo $#

пример :

 Консоль:

Argument="шла маша по шосе! ахтунг! нихт шиссе! Ганс фояр!"
script.sh -F 1 $Argument
-F
1
шла
-F 1 шла маша по шосе! ахтунг! нихт шиссе! Ганс фояр!
11

обрати внимание на то, как баш обрабатывает массив, если его в скрипте вызвать как локальную переменную а не как собсно массив...

вот ещё на почитать https://coderoad.ru/22591272/%D0%9F%D0% … 0%BE%D0%BC

" si contuderis stultum in pila quasi tisanas feriente desuper pilo non auferetur ab eo stultitia eius " © Proverbs 27:22

10 (15.07.2020 12:13:34 отредактировано sunjob)

уважаемый, грамазек! пожалуйста, переставайте уже юродсоввать, а?! :о)
кастрируйте лучше свои высказывания (кот.вы тут понаогурцали) ... :о)

а уж мои, пусть так и остануться такими, какие есть (читайте внимательней, вдумчивей и размыслявей) :о)

надо передать "составную" команду строкой
"исходный вариант команды" - закомментирован

а вообще, для всех ... товарищей, кот. без строчки кода (втч и перенесенного) ... посвящается :о)

еще раз, по буквам, по словам, по замыслам...

надо передать "составную" команду строкой

значит - есть эта составная команда, ее надо обернуть в строку и передать в другую команду/скрипт итд

"исходный вариант команды" - закомментирован

воно че! значит есть и еще исходный вариант, который надо было передать, но были ошибки, из-за чего и появился топик...
этот вариант закоментирован (это 100% точный отсыл к конкретному коду...)

ну и естественно, в топике приведен полный код, который рассматривается... (а рассматривается ли?! :о)))

вот и попробуйте, уж не снизойдите... возьмите эту команду и передайте ее строкой...

п.с.
как говориться, "ни знаю ни знаю...", на лоре все сразу поняли!

удачных вам трудовых будней :о)

... и да, я тоже люблю анекдоты... :о) был более интересный вариант анекдота про "приборы"... но и он тут не к месту :о)

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

... и приятных вам выходных :о)

11

sunjob пишет:

ну и естественно, в топике приведен полный код, который рассматривается... (а рассматривается ли?! :о)))

вот и попробуйте, уж не снизойдите... возьмите эту команду и передайте ее строкой...

п.с.
как говориться, "ни знаю ни знаю...", на лоре все сразу поняли!

если бы ты потрудился почитать моё сообщение полностью, то увидел бы в ссылках ответ на свой вопрос, более того eval - плохой пример и знающие люди даже показывают как нужно делать...
а лор... что ж ты сюда то полез, раз на лоре всё знают и понимают? Или ты считаешь что местные обитатели лор не читают?

" si contuderis stultum in pila quasi tisanas feriente desuper pilo non auferetur ab eo stultitia eius " © Proverbs 27:22

12 (15.07.2020 15:10:12 отредактировано ValentinK)

sunjob

Ну возьми перебери строки скрипта в цикле и где есть знаки переноса замени на пробелы склей команду в одну линию.
Будешь обрабатывать символы "\" и "возврат каретки" для раздела команд. Пустые строки игнорируй.

Fedora 35 KDE.
Linux is great and super! Long live rock'n'roll! Opera and libretto.
По-русски калинка-малинка моя! Люблю оливье и винегрет.
Yours sincerely, wasting away! Salute people!