sudo bash -c
を使用してシェルコマンドを実行しているときに変数拡張を制御したいと思います。Bash - サブシェル文字列にリテラルを強制するには?
私は、通常のシェルからそれを行うことができます知っている:
bash$ export FOO=foo
bash$ export BAR=bar
bash$ echo "expand $FOO but not "'$BAR'""
expand foo but not $BAR
にはどうすれsudo bash -c
を用いて上記行うことができますか?
$> bash -c "echo \"expand $FOO but not \"'\$BAR'"
expand foo but not $BAR
私はエスケープを避けるために、ここで-docの使用をお勧めしかし:
# original echo replaced with printf
$> printf 'expand %s but not %s\n' "$FOO" '$BAR'
expand foo but not $BAR
# prints in here-doc with bash
$> bash<<-'EOF'
printf 'expand %s but not %s\n' "$FOO" '$BAR'
EOF
expand foo but not $BAR
、ルートENVで動作するようにsudo -Eを使用しています。 http://stackoverflow.com/questions/8633461/how-to-keep-environment-variables-when-using-sudo – shj