Вероятно, двойные кавычки подойдут:
sudo -H -u $myuser bash -c "DISPLAY=:0 /usr/bin/dbus-launch $pathappimage start -i &"
или если ваш $pathappimage
может содержать пробелы и т.д .:
… "DISPLAY=:0 /usr/bin/dbus-launch \"$pathappimage\" start -i &"
^^ ^^
# these double quotes are escaped and they will remain
Если вам нужны одинарные кавычки по причине, вы можете изменить тип кавычек, например:
sudo -H -u $myuser bash -c 'DISPLAY=:0 /usr/bin/dbus-launch '"$pathappimage"' start -i &'
# ^---- this is still treated as a single argument to bash ----^
$pathappimage
будет расширен текущей оболочкой до запуска bash
. Если вы хотите, чтобы bash
видел результат в двойных кавычках, если у вас есть пробелы или что-то в $pathappimage
, то вызовите так:
… 'DISPLAY=:0 /usr/bin/dbus-launch "'"$pathappimage"'" start -i &'
# ^ ^
# these double quotes are in single quotes and they will remain
или даже в кавычках:
… 'DISPLAY=:0 /usr/bin/dbus-launch '\'"$pathappimage"\'' start -i &'
# ^^ ^^
# these single quotes are escaped and they will remain
Другой (низший) подход. Вы можете export
переменную, передать всю строку в одинарных кавычках, а затем отменить экспорт при необходимости:
export pathappimage
bash -c 'DISPLAY=:0 /usr/bin/dbus-launch "$pathappimage" start -i &'
# bash will see the whole single-quoted string literally
export -n pathappimage
Теперь bash
вы вызываете, расширит $pathappimage
, эта переменная будет в его окружении. Однако sudo
не сохранит среду, если вы не используете sudo --preserve-env
, что может быть не тем, что вы хотите или можете сделать. Из-за этого умное цитирование лучше и, вероятно, безопаснее.