The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"bash, передача команды строкой"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"bash, передача команды строкой"  +/
Сообщение от sunjobemail (ok), 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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "bash, передача команды строкой"  +/
Сообщение от Аноним (1), 13-Июл-20, 13:34 
>
> #!/bin/sh
> #///////////////////////////////////////////////////////////////////////////////
> bash-3.1.017-i486-2

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

Ответить | Правка | Наверх | Cообщить модератору

2. "bash, передача команды строкой"  +/
Сообщение от sunjobemail (ok), 13-Июл-20, 13:37 
да ты баш-ковитый, разбираешься, видимо?! :о)
slackware
Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

4. "bash, передача команды строкой"  +/
Сообщение от sunjobemail (ok), 13-Июл-20, 17:26 
ВДНЕ... хм... ВДНХ - знаю, а что такое ВДНЕ? может, На дне?

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

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

спасибо


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

Ответить | Правка | Наверх | Cообщить модератору

5. "bash, передача команды строкой"  +/
Сообщение от Павел Отредиезemail (?), 13-Июл-20, 18:29 
>[оверквотинг удален]
> --title=$(echo Выбор$Xфайла)      \
> "
> cmd
> exit 0
>
> исходные
>
 
> bash-3.1.017-i486-2
> slackware 12.2
>

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

Ответить | Правка | Наверх | Cообщить модератору

6. "bash, передача команды строкой"  +/
Сообщение от sunjobemail (ok), 13-Июл-20, 18:33 
возьми вместо ls - ту, исходную команду, кот. закоментирована... вот ее и передай... строкой ... :о)

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

8. "bash, передача команды строкой"  +/
Сообщение от ACCA (ok), 15-Июл-20, 18:42 
cmd()
{
eval $CMD
}

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

cmd(){ eval $* }


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

cmd $CMD

Ответить | Правка | Наверх | Cообщить модератору

9. "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_" - добавляем бекслеш.)
Ответить | Правка | Наверх | Cообщить модератору

10. "bash, передача команды строкой"  +/
Сообщение от sunjobemail (ok), 22-Июл-20, 18:09 
спасибо! уже давно подсказали, просто, для расширения вариантов ответов спросил и тут
п.с. массивы

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


Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру