Я просто хотел узнать, есть ли способ передать аргументы в скрипт 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). Сначала вам нужно запустить ваше приложение perl через autoexpect, отвечая на входные данные. Но после этого вам нужно будет только запустить скрипт вывода, сгенерированный 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, но все еще актуально, если у кого-то еще есть тот же вопрос. В основном все ответы на эти вопросы находятся в файле, который называется файлом контекста. После того, как вы зададите среду Apps, файл контекста будет в ${CONTEXT_FILE}
. Так что, запустив:
perl adcfgclone.pl appsTier "$CONTEXT_FILE"
Вас попросят ввести только пароль приложения.