シェルで設定された変数は「bash -c 'command'」では読み込まれません

シェルで設定された変数は「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

デフォルトでは、シェル変数はシェルから起動されたコマンドにエクスポートされません。

明示的に を実行する必要があります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'

''引用符はリテラルで、""引用符は変数の拡張を可能にします。私は両方を使用して、それらを連結しました。 のみを使用した場合でも機能します""

関連情報