URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10316
[ Назад ]

Исходное сообщение
"bash, передача команды строкой"

Отправлено sunjob , 13-Июл-20 11:07 
добрый день

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

понимаю, что непонимаю глубинных смыслов башизма :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


Содержание

Сообщения в этом обсуждении
"bash, передача команды строкой"
Отправлено Аноним , 13-Июл-20 13:34 
>
> #!/bin/sh
> #///////////////////////////////////////////////////////////////////////////////
> bash-3.1.017-i486-2

Пендель номер раз - для начала, определись, с чем ты все-таки работаешь - Bourne Shell (/sh) или Bourne Again Shell (/bash)


"bash, передача команды строкой"
Отправлено sunjob , 13-Июл-20 13:37 
да ты баш-ковитый, разбираешься, видимо?! :о)
slackware

"bash, передача команды строкой"
Отправлено Аноним , 13-Июл-20 15:28 
> да ты баш-ковитый, разбираешься, видимо?! :о)
> slackware

ВДНЕ за слаку. Кто там на кого показывает, баш на борна или наоборот.
Но зато видел многих башковитых, пытавшихся борна рядить в башево полукафтанье...


"bash, передача команды строкой"
Отправлено sunjob , 13-Июл-20 17:26 
ВДНЕ... хм... ВДНХ - знаю, а что такое ВДНЕ? может, На дне?

п.с. ну уже достаточно померялись, давай перемирие... по теме?!

вообще-то уже б.м. прояснилось, но можно дополнить, или высказать свои мысли...

спасибо


ls -l /bin/sh
lrwxrwxrwx 1 root users 4 Sep  4  2015 /bin/sh -> bash*


"bash, передача команды строкой"
Отправлено Павел Отредиез , 13-Июл-20 18:29 
>[оверквотинг удален]
> --title=$(echo Выбор$Xфайла)      \
> "
> cmd
> exit 0
>

> исходные
>
 
> bash-3.1.017-i486-2
> slackware 12.2
>

А в одинарный кавычках у тебя не сработает?
CMD='ls'
Если нужно вставлять значения переменных, то двойные кавычки. Если символы как есть, то одинарные.


"bash, передача команды строкой"
Отправлено sunjob , 13-Июл-20 18:33 
возьми вместо ls - ту, исходную команду, кот. закоментирована... вот ее и передай... строкой ... :о)

(простые команды - не проблема)


"bash, передача команды строкой"
Отправлено Павел Отредиез , 15-Июл-20 17:31 
> возьми вместо ls - ту, исходную команду, кот. закоментирована... вот ее и
> передай... строкой ... :о)
> (простые команды - не проблема)

Нафиг, я час убил. Пиши лучше команды как есть.


"bash, передача команды строкой"
Отправлено ACCA , 15-Июл-20 18:42 
cmd()
{
eval $CMD
}

Но лучше передавать параметры не через жопу, а в явном виде:

cmd(){ eval $* }


Потом вызывать как

cmd $CMD


"bash, передача команды строкой"
Отправлено Дмитрий Ю.Карпов , 22-Июл-20 02:54 
Я думаю, как-то так:

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

Есть ещё такой вариант, причём я не уверен, что тут можно разбивать строку на несколько:


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

(Строка "_END_" указывается в начале и обозначает конец ввода. Внутри можно использовать переменные окружения и запускать программы через ё-апострофы или доллар-со-скобками.
Если этого хочется избежать, и лень бекслешить - то вместо "<<_END_" пишем "<<\_END_" - добавляем бекслеш.)

"bash, передача команды строкой"
Отправлено sunjob , 22-Июл-20 18:09 
спасибо! уже давно подсказали, просто, для расширения вариантов ответов спросил и тут
п.с. массивы

https://www.linux.org.ru/forum/development/15807363