我只是想知道是否有任何方法可以在編譯期間傳遞 perl 腳本 () 中的參數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包中)。最初,您必須透過 autoexpect 運行 Perl 應用程序,回答輸入。但之後,您只需要執行 autoexpect 產生的輸出腳本,該腳本會填入所有輸入。
貓expect-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"
您只會被要求提供應用程式密碼。