需要在 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"

您只会被要求提供应用程序密码。

相关内容