Las variables configuradas en el shell no se leen en "bash -c 'command'"

Las variables configuradas en el shell no se leen en "bash -c 'command'"

Aporte:

sudo bash -c '>> /media/$USER/rootfs/etc/profile'

Producción:

bash: /media/root/rootfs/etc/profile: No such file or directory

Aporte:

TEST=$USER
sudo bash -c '>> /media/$TEST/rootfs/etc/profile'

Producción:

bash: /media//rootfs/etc/profile: No such file or directory

En lugar de:

/media/riccardo/rootfs/etc/profile

¿Cómo puedo solucionar el problema?

Respuesta1

Las variables del Shell no se exportan a comandos iniciados desde el Shell de forma predeterminada.

Debes hacerlo explícitamente con export, por ejemplo:

$ export test=foo
$ bash -c 'echo test=$test'
test=foo

Excepto que sudoaún puede limpiar el entorno antes de pasarlo a bash, por lo que es posible que deba usar los argumentos de la línea de comando en su lugar:

$ test=foobar 
$ sudo bash -c 'echo "$1"' sudo_bash "$test"
foobar

No es necesario hacerlo exportaquí, y sudo_bashes solo una cadena que se usa como "nombre" de ese shell interno; lo vería si la -ccadena tuviera, por ejemplo, un error de sintaxis.

Ver también:

Respuesta2

Problemas de cotización

sudo bash -c '>> /media/'"$USER"'/rootfs/etc/profile'
test=$USER
sudo bash -c '>> /media/'"$test"'/rootfs/etc/profile'

''las comillas son literales y ""permiten la expansión de variables. He usado ambos, concatenándolos juntos. También funcionaría si solo usara "".

información relacionada