0

次の問題があります。UNIX サーバーに password.txt という名前の txt ファイルがあります。同じサーバーにJavaクラスがあります。この Java クラスを使用して、password.txt の内容を読み取る必要があります。ただし、Unix は root ユーザーで実行されており、root ユーザーにはこの password.txt ファイルを直接読み取るための適切な権限がありません。そこで、password.txt を読み取るスクリプトと別の Java クラスを導入しました。

基本的には、Process と Runtime.exec() を使用して Java クラスからスクリプトを呼び出します。このスクリプトは、password.txt ファイルの内容を読み取ることができる別の Java クラスを呼び出します。しかし、スクリプトを呼び出した Java クラスにコンテンツを戻すにはどうすればよいでしょうか。password.txt の内容を環境変数に割り当て、Java クラスでその環境変数を読み取ることを誰かが提案しました。これを正確に実装するにはどうすればよいですか。また、これは良い解決策ですか?UNIX とスクリプトの初心者です。助けてください

4

2 に答える 2

0

私はあなたの Java とスクリプトの階層に少し混乱していることを告白します (ファイルを 経由で直接読み取ることはできないと思いますFileReader)。おそらく、1 つの Java クラスと 1 つのスクリプトだけが必要な場合があります (適切に許可されている -これまたはこれのように?)。

しかし、スクリプトを呼び出した Java クラスにコンテンツを戻すにはどうすればよいでしょうか。

環境変数はプロセスとその子でのみ使用できるため、使用できません。子プロセスで変更しても、親プロセスでは変更が反映されません。

読み取りクラスに、読み取ったデータを stdout に書き込むようにします (単純な を介してSystem.out.println())。経由で開始したプロセスから入力ストリームを読み取ることができるはずですProcess.exec()Process.getInputStream()のドキュメントから:

サブプロセスの入力ストリームを取得します。ストリームは、この Process オブジェクトによって表されるプロセスの標準出力ストリームからパイプされたデータを取得します。

いくつかの落とし穴があります。生成されたプロセスからのデータの読み取り。詳細については、この回答を参照してください。

于 2012-08-09T08:26:37.023 に答える
0

スクリプトでコンテンツ ファイルを標準出力に書き込むことができます。スクリプトは、適切な権限を取得するためにsuまたはsudoと組み合わせたcatである可能性があります。次に、スクリプトの開始に使用したオブジェクトでgetInputStream()を呼び出して、データを読み取ることができます。Process

于 2012-08-09T08:28:33.100 に答える