需要在 adcfgclone.pl 腳本中傳遞參數

需要在 adcfgclone.pl 腳本中傳遞參數

我只是想知道是否有任何方法可以在編譯期間傳遞 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"

您只會被要求提供應用程式密碼。

相關內容