在 shell 中设置的变量不会在“bash -c 'command'”中读取

在 shell 中设置的变量不会在“bash -c 'command'”中读取

输入:

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

输出:

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

输入:

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

输出:

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

代替:

/media/riccardo/rootfs/etc/profile

我该如何解决这个问题?

答案1

默认情况下,Shell 变量不会导出到从 shell 启动的命令。

您需要明确地使用 来执行此操作export,例如:

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

除了sudo在将环境传递给 之前仍可能清理环境之外bash,因此您可能需要使用命令行参数:

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

这里不需要export,它sudo_bash只是一个用作该内壳“名称”的字符串,如果该-c字符串有语法错误,您就会看到它。

也可以看看:

答案2

引用问题

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

''引号是文字,""引号允许变量扩展。我已经使用了两者,将它们连接在一起。如果我只使用它也会起作用""

相关内容