输入:
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'
''
引号是文字,""
引号允许变量扩展。我已经使用了两者,将它们连接在一起。如果我只使用它也会起作用""
。