
コンパイル時にPerl script()にパラメータを渡す方法があるかどうか疑問に思います。adcfgclone.pl
(つまり、スクリプトの実行時に値を要求しないでください。)
以下は、スクリプトの実行後に値を渡す例です。
新しい APPL_TOP コンテキストファイルを生成するために必要な値を指定します。
Target System Hostname (virtual or normal) [proddb] :
Target Instance is RAC (y/n) [n] : n
Target System Database SID : proddb1
Target System Base Directory : /d06/oravis
Target System utl_file_dir Directory List : /usr/tmp
Number of DATA_TOP's on the Target System [1] : 1
Target System DATA_TOP Directory 1 [/d01/oravsn12/db/apps_st/data] : /d06/oravis/db/apps_st/data
Target System RDBMS ORACLE_HOME Directory [/d06/oravis/db/tech_st/10.2.0] : /d06/oravis/db/tech_st/10.2.0
Do you want to preserve the Display [null] (y/n) ? : n
Target System Display [sharkap:0.0] :
Target System Port Pool [0-99] : 34
注:スクリプトの実行中に上記の値をすべて入力するので、すべてのパラメータをファイルに渡してスクリプトを実行しますadcfgclone.pl
。
答え1
正直言って、これがまさにあなたが望むものかどうかわかりません。完全なPerlコンパイル時間/ランタイムの問題により、少し混乱しました。
autoexpectを試すことができます(expectパッケージに含まれています)。最初は、入力に応答する自動期待を介してPerlアプリケーションを実行する必要があります。しかし、その後、すべての入力を埋めるautoexpectによって生成された出力スクリプトを実行します。
catexpect-test.pl
#!/bin/perl
use warnings;
use strict;
print "Enter your input: ";
my $input = <STDIN>;
chomp $input;
print "You typed: $input\n";
autoexpect -f expect-test.exp ./expect-test.pl
autoexpect started, file is expect-test.exp
Enter your input: bob
You typed: bob
autoexpect done, file is expect-test.exp
./expect-test.exp
spawn ./expect-test.pl
Enter your input: bob
You typed: bob
あるいは、入力ファイルをPerlスクリプトにリダイレクトすることもできます。
cat input.text
bart
./expect-test.pl < input.text
Enter your input: You typed: bart
答え2
OPは少し遅れているかもしれませんが、他の人が同じ問題を抱えている場合はまだ関係があります。デフォルトでは、これらの質問に対するすべての答えはコンテキストファイルと呼ばれるファイルにあります。アプリケーション環境を設定したら、次のコマンドを実行してコンテキストファイルを見つけます${CONTEXT_FILE}
。
perl adcfgclone.pl appsTier "$CONTEXT_FILE"
あなたのアプリケーションのパスワードだけを尋ねます。