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

''引用符はリテラル""であり、引用符を使用すると変数を拡張できます。私は両方とも接続して使ってみました。ただ使用しても動作します""

関連情報