Извиняюсь, если какая-то терминология здесь не совсем понятна.Не стесняйтесь поправлять меня, если я что-то неправильно использую.
Можно ли использовать Perl в качестве "расширенной оболочки" для запуска "пакетных" скриптов?(в Windows)
Проблема, с которой я сталкиваюсь при замене скрипта .bat
/ .cmd
, который слишком усложняется скриптом perl, заключается в том, что я не могу легко запускать подпроцессы, как это делает оболочка.
То есть я хотел бы сделать то же самое из моего сценария perl, что и оболочка, при вызове дочернего процесса, то есть полностью "соединить" STDIN, STDOUT и STDERR.
Пример:
foo.bat -
@echo off
echo Hello, this is a simple script.
set PARAM_X=really-simple
:: The next line will allow me to simply "use" the tool on the shell I have open,
:: that is STDOUT + STDERR of the tool are displayed on my STDOUT + STDERR and if
:: I enter something on the keyboard it is sent to the tools STDIN
interactive_commandline_tool.exe %PARAM_X%
echo The tool returned %ERROLEVEL%
Однако я понятия не имею, как полностью реализовать это в perl (возможно ли это вообще?):
foo.pl -
print "Hello, this is a not so simple script.\n";
my $param_x = get_more_complicated_parameter();
# Magic: This sub executes the process and hooks up my STDIN/OUT/ERR and
# returns the process error code when done
my $errlvl = run_executable("interactive_commandline_tool.exe", $param_x);
print "The tool returned $errlvl\n";
Как мне добиться этого в Perl?Я играл с IPC :: Open3 , но, похоже, это не сработало ...