入力:
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
デフォルトでは、シェル変数はシェルから起動されたコマンドにエクスポートされません。
明示的に を実行する必要があります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'
''
引用符はリテラルで、""
引用符は変数の拡張を可能にします。私は両方を使用して、それらを連結しました。 のみを使用した場合でも機能します""
。