Могу ли я выполнить замену команд в стиле bash в программе запуска .desktop? Например, нечто похожее на это:
Exec=/some/prog --arg "$(zenity --entry)"
Под этим я подразумеваю «запустить эту команду и поместить ее стандартный вывод в содержащую командную строку, а затем выполнить это».
Есть ли способ сделать это, не создавая отдельный файл сценария bash?
Я нашел этот хак (запускающий bash -c '...'
), который может работать, но, может быть, есть правильный способ сделать это, например, какой-то специальный синтаксис .desktop?
РЕДАКТИРОВАТЬ : Я только что обнаружил, что $ (...) работает нормально внутри файла .desktop ... почти.
У меня все еще есть проблема с ошибкой (ненулевой код выхода) в команда подстановки прерывает выполнение команды. Как я могу это сделать? Я попытался присвоить переменную, например:
Exec= resp="$(zenity --entry)" && /some/prog --arg $resp
, но это не сработало, потому что вместо прерывания она пытается выполнить «&&» как команду, когда внутренняя команда терпит неудачу.
В итоге мне пришлось использовать bash -c.
Это способ правильной обработки подстановки команд с поддержкой ошибок при правильной передаче файлов в %F
. Мне нужно расширить %F
вне кавычек '...'
и передать файлы в качестве аргументов, а затем снова расширить их с помощью "$@"
внутри одинарные кавычки, иначе я не смогу правильно обрабатывать несколько файлов с пробелами на каждом пути.
Exec= bash -c 'r=$(zenity --entry) && /some/prog --arg "$r" "$@"' "$0" %F