Entrada:
sudo bash -c '>> /media/$USER/rootfs/etc/profile'
Saída:
bash: /media/root/rootfs/etc/profile: No such file or directory
Entrada:
TEST=$USER
sudo bash -c '>> /media/$TEST/rootfs/etc/profile'
Saída:
bash: /media//rootfs/etc/profile: No such file or directory
Em vez de:
/media/riccardo/rootfs/etc/profile
Como posso resolver o problema?
Responder1
As variáveis do shell não são exportadas para comandos iniciados no shell, por padrão.
Você precisa fazer isso explicitamente com export
, por exemplo:
$ export test=foo
$ bash -c 'echo test=$test'
test=foo
Exceto que isso sudo
ainda pode limpar o ambiente antes de passá-lo para bash
, então você pode precisar usar os argumentos da linha de comando:
$ test=foobar
$ sudo bash -c 'echo "$1"' sudo_bash "$test"
foobar
Não há necessidade export
aqui, e sudo_bash
é apenas uma string usada como o "nome" desse shell interno, você veria se a -c
string tivesse, por exemplo, um erro de sintaxe.
Veja também:
Responder2
Citando problemas
sudo bash -c '>> /media/'"$USER"'/rootfs/etc/profile'
test=$USER
sudo bash -c '>> /media/'"$test"'/rootfs/etc/profile'
''
aspas são literais, ""
as aspas permitem a expansão de variáveis. Eu usei os dois, concatenando-os juntos. Também funcionaria se eu usasse apenas ""
.