LINUX.ORG.RU

Прошу помощи с bash-scripting: нужно подставить из переменной выражение find

 ,


1

2

Добрый день! Пишу себе скрипт-запускатор, вот код: https://gist.github.com/anonymous/993b6e1c9c0b7e6e1d69bb0fd8eae7e4

Возникает проблема при подстановке выражения для find из переменной LISTGEN. Я понимаю, что скорее всего проблема в том, что $QUERY обрабатывается как слово, а не как место, куда должно быть подставлено значение переменной, но знаю bash плохо, и не имею догадок, что следует сделать, чтобы всё заработало так, как я хочу. Пожалуйста, помогите в этом разобраться. Заранее спасибо.

★★

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

zolden ★★★★★
()
Ответ на: комментарий от zolden

Идея такова: скрипт запускается с одним аргументом, m или f, в зависимости от этого аргумента выбирается команда, которой генерируется список файлов (на основании ввода), и команда-обработчик для элемента списка. Выводится список, с клавиатуры вводится номер элемента, для него выполняется обработчик. В случае с «m» список генерируется как вывод поиска по коллекции mpd, и обработка заключается в добавлении трека следующим в очередь. В случае «f» выполняется find по всем нескрытым объектам ~/, и объект открывается с помощью exo-open (xfce4).

Norong ★★
() автор топика

должно быть подставлено значение переменной, но знаю bash плохо, и не имею догадок, что следует сделать

ну возьми да оформи в виде функции

anonymous
()
Ответ на: комментарий от crutch_master

Ага. Оно определяется ниже. Собственно, потому и \ перед $. После этого LISTGEN выглядит ровно как та команда, которую надо выполнить.

Norong ★★
() автор топика
Ответ на: комментарий от ananas

Теперь скрипт выглядит так: https://gist.github.com/anonymous/2dd555b3e98a78bcba42fa98210c8c1e

Поиск работает, но возникла ещё одна проблема: программа, запускаемая exo-open, завершается при завершении скрипта, т.е. ситуация такая (для наглядной демонстрации): если последней строкой дописать read, запустить ./myscript f и выбрать какой-нибудь файл, то запустится соответствующая программа (выбранная exo-open), но при вводе чего-либо в командную строку и нажатии enter она закроется. Соответственно, без read ничего и не запускается. Я попробовал вместо $HANDLER написать exec $HANDLER, но это не помогло. В htop при отображении процессов в виде дерева запускаемая программа отображается как сын init'а, но не скрипта. Не подскажешь, как исправить?

Norong ★★
() автор топика
Ответ на: комментарий от Norong

Не понимаю, что это.

echo "$QUERY_RESULT" | cat -n
read

Может быть, select нужен, он ведь прямо для этого и сделан? Не знаю, что за exo-open, но предполагаю, что вам нужен & в конце команды.

DRVTiny ★★★★★
()
Ответ на: комментарий от DRVTiny

Не понимаю, что это.

Наверное выводится содержимое HOME и запрашивается номер файла. :)

А вообще банить ТСа за такие выкрутасы с кусками кода.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Да не, понятно, чего он хочет, просто непонятно, почему он не знает о существовании select.

Почему он не вставляет код сюда в тегах «code» - для меня тоже загадка.

DRVTiny ★★★★★
()
Ответ на: комментарий от DRVTiny

Почему он не вставляет код сюда

У меня есть подозрение, что ТС не в состоянии сделать реально тестовый код для демонстрации конкретного вопроса, а дёргает куски в надежде, что они по делу. :(

vodz ★★★★★
()
Ответ на: комментарий от DRVTiny

Ни &, ни &disown в конце команды не дают нужного эффекта.

Про select я не знал, спасибо.

Код я кидаю на гитхаб, чтобы когда я указываю на N-строку, читателям не пришлось их считать. Если удобнее в code - не проблема, будет code

Однако, ложная тревога. Скрипт я запускал через xfce-шный лаунчер - такая проблема только с ним. Если запускать из командной строки, то проблемы нет. С лаунчером буду разбираться самостоятельно.

Norong ★★
() автор топика
Последнее исправление: Norong (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.