2017-08-02 14 views
0

私はOracleでftm cliを使用しています。コマンドを実行すると、「パスワードを入力してください」と言ってパスワードを要求します。私はこのコマンドを使用するスクリプトを書いているので、プログラムでパスワードを入力したいと思います。bashスクリプト内のJavaアプリケーションへの入力をリダイレクト

echo "password" | java -jar ftmcli.jar list 

をしかし、これは動作しません - は、ここで私がしようとしているものです。それを動作させるために何をすべきか?

+0

ftm cliはどこにありますか? –

+0

おそらく代わりに 'expect'を使う必要があります – CWLiu

+0

@ MarkSetchell私はftm cliへの呼び出しをjavaコマンドで置き換えました。実際の呼び出しは 'java -jar ftmcli.jar list'のように見えます – user7916799

答えて

2

ftmcliのソースコードを調べることはできませんが、私は、java.io.ConsoleクラスのをOracleが使用していると推測します。

パブリック最終クラスコンソール文字ベースのコンソールデバイスにアクセスするための

方法があれば、現在のJava仮想マシンに関連付けられ :ただし、この機能に暗礁があります。

仮想マシンにコンソールがあるかどうかは、基本プラットフォームの と、仮想マシン が呼び出される方法にも依存します。標準入力と 出力ストリームをリダイレクトせずに 対話型コマンドラインから仮想マシンを起動すると、そのコンソールが存在し、通常 が仮想マシン が起動されたキーボードとディスプレイに接続されます。仮想マシンが自動的に起動される場合、バックグラウンドジョブスケジューラによる の例の場合、コンソールには通常 コンソールがありません。

この仮想マシンにコンソールがある場合は、 System.console()メソッドを呼び出すことで取得できるこのクラスの一意のインスタンス で表されます。使用可能なコンソールデバイスがない場合、そのメソッドの 呼び出しはnullを返します。 JVMにechostdoutをリダイレクトする配管によって

/、JavaメソッドSystem.console()nullを返すので、あなたのリダイレクションから何かを読んでいないだろう。

同じ問題を扱う、次の質問を見ますが、Java側に:あなたの側では"How to handle java passwd reading when System.console() returns null?"またはHow to pipe input to Java program with bash

、あなたが本当に行うことができます多かれ少なかれものは何もありません。 echo $password | java -jar ftmcli.jar listまたはjava -jar ftmcli.jar list <<< $passwordを実行すると、ftmcliのパスワードがstdinから読み取られる方法が変更されない限り、常に失敗します。

+0

パスワードを/ proc/$(pgrep -f '-jar ftmcli.jar list)/に送ってみてください。入力を待っている 'ftmcli'を起動した後、' fd/0'(特定のプロセスの 'stdin')を実行します。しかし、私はこれを試していないし、それが動作することを保証することはできません。 –

+1

良い答え。時には、環境変数を設定することでパスワードを渡すことができます(例えば、 'export FTM_PASSWORD = secret')。それがここで可能かどうかは分かりません。 –

関連する問題