0

私は古いCソフトウェアに取り組んでいます。kshプログラムを実行するスクリプトが 1 つあります。このスクリプトはC、他のプロセスをいくつか作成して終了します。これらのプロセスは生きたままです。

kshまだ生きている新しく作成されたプロセスでアクセスできるように、スクリプト内に環境変数を設定しようとしています。

私はこの方法を試しました:

#!/bin/ksh

VARIABLE=value
export VARIABLE

my_c_program

しかし、それはうまくいきません...私はしようとしました:

  1. ksh スクリプトを bash に変更する
  2. 変数を作成してエクスポートし、元の ksh スクリプト (C プログラムを実行するだけ) を実行するラッパー スクリプトを作成します。
  3. 実行する代わりに、kshスクリプト(または2で試す場合はラッパースクリプト)を調達する

しかし、それは何も機能しませんでした。

今のところ機能するのは、手動で明示的にコマンドを実行するときだけです。

export VARIABLE

現在の bash ターミナルで。

なんで?手動で行うのではなく、スクリプト内でエクスポートを行うことはできませんか?

4

2 に答える 2

1

実際にはすべて問題ありません...

実は、私の ksh スクリプトで実行された C プログラムの子プロセスだと思っていたプロセスは、以前に実行された別のプロセスの子プロセスでした。Cプログラムは、共有メモリを介してメッセージを送信し、他のプログラムにその子を実行するように指示していました.

実際、環境変数が私の C プログラムから他の子プログラムに渡されることはありませんでした。その変数を子に設定したのは、変数がエクスポートされたシェルで他のプログラム(子の実際の親であるプログラム)を実行したときだけです。

于 2013-08-22T13:52:53.053 に答える
0

上記のコードは正しいように見え、動作するはずです。それを行う別の方法は次のとおりです。

VARIABLE=value my_c_program

プログラムのためだけに変数をエクスポートします。その後、変数は設定されますが、他の外部プロセスはコピーを取得しません。

では、なぜスクリプトが機能しないのでしょうか? わかりにくいですが、問題をデバッグするためのヒントをいくつか示します。

  1. #!/bin/ksh -xデバッグ出力を有効にするために使用します。出力をファイルに保存してgrep VARIABLEから、何が起こるかを確認します。

  2. タイプミスがないか確認してください。

  3. もう 1 つのシェル スクリプトは、外部プロセスのようなものです。というわけでスクリプトを作成

    #!/bin/ksh
    
    echo $VARIABLE
    

    my_c_program変数を渡すことを確認するだけでなく、それを呼び出します。

  4. たぶん、Cは予期しないことをします。デバッガーを使用して、期待どおりに動作することを確認してください。

于 2013-08-21T08:58:54.173 に答える