sudoのため、envsubstは空の出力を印刷します。

sudoのため、envsubstは空の出力を印刷します。

いくつかの変数をエクスポートし、いくつかの場所で使用するスクリプトがあります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を開き(読み取り、渡し)、shTargetFileを開き、catここにデータを書き込むために使用されます。

GNUシステムを使用している場合は、次のようにすることもできます。

sudo dd bs=64k status=none if=SourceFile |
  envsubst |
  sudo dd bs=64k status=none of=TargetFile

バラよりstdinから読み込み、ファイルに書き込むUnixコマンドはありますか(例:出力をstdoutに送信せずにtee)。詳細やその他の方法をご覧ください。

おすすめ記事