ここに最初の投稿がありましたが、何年もの間潜んでいました。私は何年もの間グーグルで検索しましたが、私が欲しいものを見つけることができません(トピックが示唆していることを要求しない多くの曖昧なトピックの主題...)。awkやスクリプトは初めてではなく、少し錆びています:)
実行時にシェル環境値を設定するawkスクリプトを作成しようとしています。別のbashスクリプトを取得して、後で使用できるようにします。awkからstdoutを使用して、設定したいこの値を報告することはできません(つまり、「exportwhatever = awk cmd here
」)。これは、awkscriptが作成している「結果ファイル」にすでに送信されているためです(さらに、エクスポートする変数が複数あります。とにかく最終的なコード)。
テストスクリプトの例として、私の問題をデモするには:
echo $MYSCRIPT_RESULT # returns nothing, not currently set
echo | awk -f scriptfile.awk # do whatever, setting MYSCRIPT_RESULT as we go
echo $MYSCRIPT_RESULT # desired: returns the env value set in scriptfile.awk
scriptfile.awk内で、私は(成功せずに)試しました
1 /)アドホック文字列を直接構築して実行する:
{
cmdline="export MYSCRIPT_RESULT=1"
cmdline
}
2 /)システム機能の使用:
{
cmdline="export MYSCRIPT_RESULT=1"
system(cmdline)
}
...しかし、これらは機能しません。これらの2つのコマンドは、awkが実行しているシェル内にサブシェルを作成し、私が求めることを実行していると思われます(テストとしてファイルに触れることで証明されています)が、「cmd」/システムコールが完了すると、残念ながらサブシェルは停止します私が設定したものは何でも取ります-したがって、私のenv設定の変更は、「awkの呼び出し元」の観点からは固執しません。
だから私の質問は、 awkの実行が完了した後に呼び出しプロセスがこれらのenv値にアクセスできるように、実際にawk内でenv変数を直接設定するにはどうすればよいですか?それは実際に可能ですか?
私が失敗したことが証明された上記のアドホック/システムの方法を除いて、これがどのように行われるのかわかりません(これらの値を呼び出し元のスクリプトによって取得されて読み取られるように「ランダムな」ファイルに書き込む以外は)とにかくimoは少し汚れています)、したがって、助けてください!
すべてのアイデア/提案/コメントを歓迎します!