いくつかの変数をエクスポートし、いくつかの場所で使用するスクリプトがありますsudo
。
簡単な例は次のとおりです。
export Name=John
sudo envsubst < SourceFile > TargetFile
SourceFile
変数があると空白$Name
として印刷されます。
削除するとsudo
機能します。
export
すべてのユーザーに共通ですか?マシン全体の変数をエクスポートするには?
答え1
デフォルトでは、sudo
環境は安全対策として渡されたいくつかのクリーンアップ変数(および明示的に一般的な値に設定されたいくつかの変数)を除いて消去されます。
sudo構成で許可されている場合は、-E
/--preserve-env
変数を使用してこの問題を解決できます。
とにかく、コマンド引数などの環境変数は、実行時にあるコマンドから別のコマンドに渡され、すべてのプロセスがアクセスできる非現実的なスペースには存在しません(これにはファイルシステムがあります)。出口イギリスマシン全体の変数無意味。
また、このenvsubst
コマンドには特別な権限が必要ないため、として扱いますroot
。ソースファイルを開くか、ターゲットファイルをとして生成しようとすると、root
次の理由で無効です。
sudo envsubst < SourceFile > TargetFile
リダイレクトは、sudo
元のユーザーとして呼び出されたシェルによって実行されます。
実行する必要があるファイルを開くコマンドは次のとおりですroot
。
sudo cat SourceFile | envsubst | sudo sh -c 'exec cat > TargetFile'
cat
これは、SourceFileを開き(読み取り、渡し)、sh
TargetFileを開き、cat
ここにデータを書き込むために使用されます。
GNUシステムを使用している場合は、次のようにすることもできます。
sudo dd bs=64k status=none if=SourceFile |
envsubst |
sudo dd bs=64k status=none of=TargetFile
バラよりstdinから読み込み、ファイルに書き込むUnixコマンドはありますか(例:出力をstdoutに送信せずにtee)。詳細やその他の方法をご覧ください。