Variável em outra variável com cotação simples

1

Eu tenho este comando (user é o nome da minha conta de usuário: echo $ USER):

sudo -H -u user bash -c 'DISPLAY=:0 /usr/bin/dbus-launch /home/user/myappimage start -i &'

Trabalhe bem. Agora eu quero criar algumas variáveis para substituir meu usuário e caminho appimage:

myuser="user"
pathappimage="/home/$myuser/myappimage"
sudo -H -u $myuser bash -c 'DISPLAY=:0 /usr/bin/dbus-launch $pathappimage start -i &'

O problema é variável $pathappimage não o reconhece devido às aspas simples dentro do comando.

Como posso corrigir isso?

    
por user4839775 18.04.2018 / 17:35

1 resposta

0

Provavelmente, as aspas duplas funcionarão:

sudo -H -u $myuser bash -c "DISPLAY=:0 /usr/bin/dbus-launch $pathappimage start -i &"

ou se o seu $pathappimage puder conter espaços, etc.:

… "DISPLAY=:0 /usr/bin/dbus-launch \"$pathappimage\" start -i &"
                                   ^^             ^^
# these double quotes are escaped and they will remain

No caso de precisar de aspas simples por um motivo, você pode alterar um tipo de aspas assim:

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 será expandido pelo shell atual antes que bash seja executado. Se você quiser que bash veja o resultado como aspas duplas, caso tenha espaços ou algo em $pathappimage , invoque assim:

… 'DISPLAY=:0 /usr/bin/dbus-launch "'"$pathappimage"'" start -i &'
#                                  ^                 ^
# these double quotes are in single quotes and they will remain

ou até mesmo entre aspas:

… 'DISPLAY=:0 /usr/bin/dbus-launch '\'"$pathappimage"\'' start -i &'
#                                   ^^               ^^
# these single quotes are escaped and they will remain

Outra abordagem (inferior). Você poderia export da variável, passar a string inteira entre aspas simples e, em seguida, não exportar se necessário:

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

Agora, bash que você chama expandirá $pathappimage , essa variável estará em seu ambiente. No entanto sudo não preservará o ambiente, a menos que você use sudo --preserve-env , que pode não ser o que você quer ou é capaz de fazer. Por causa disso, citações inteligentes são melhores e provavelmente mais seguras.

    
por 18.04.2018 / 18:33