Eingang:
sudo bash -c '>> /media/$USER/rootfs/etc/profile'
Ausgabe:
bash: /media/root/rootfs/etc/profile: No such file or directory
Eingang:
TEST=$USER
sudo bash -c '>> /media/$TEST/rootfs/etc/profile'
Ausgabe:
bash: /media//rootfs/etc/profile: No such file or directory
Anstatt:
/media/riccardo/rootfs/etc/profile
Wie kann ich das Problem lösen?
Antwort1
Shell-Variablen werden standardmäßig nicht in Befehle exportiert, die von der Shell gestartet werden.
Sie müssen dies explizit tun export
, zum Beispiel:
$ export test=foo
$ bash -c 'echo test=$test'
test=foo
Außer dass sudo
möglicherweise noch die Umgebung bereinigt wird, bevor es an übergeben wird bash
, sodass Sie stattdessen möglicherweise die Befehlszeilenargumente verwenden müssen:
$ test=foobar
$ sudo bash -c 'echo "$1"' sudo_bash "$test"
foobar
export
Dies ist hier nicht erforderlich . sudo_bash
Es handelt sich lediglich um eine Zeichenfolge, die als „Name“ dieser inneren Shell verwendet wird. Sie würden dies sehen, wenn die -c
Zeichenfolge beispielsweise einen Syntaxfehler hätte.
Siehe auch:
Antwort2
Zitierprobleme
sudo bash -c '>> /media/'"$USER"'/rootfs/etc/profile'
test=$USER
sudo bash -c '>> /media/'"$test"'/rootfs/etc/profile'
''
Anführungszeichen sind wörtlich zu verstehen und ""
ermöglichen die Erweiterung von Variablen. Ich habe beides verwendet und sie miteinander verkettet. Es würde auch funktionieren, wenn ich nur verwendet hätte ""
.