admin@admin:~$ function fun1() { echo "abc"; } admin@admin:~$ fun1 abc
我想从Perl调用这个函数。
admin@admin:~$ perl -e 'fun1' admin@admin:~$
没有输出。我需要做什么来运行我的shell函数和其他变量,或者Perl无法做到这一点?
l7wslrjt1#
函数可以在bash中导出,然后在子shell中调用
$ function fun1 { echo "abc"; } $ export -f fun1 $ perl -wE'system "bash", "-c", "fun1"'
(其中$表示shell提示符)在bash 5.1.8(1)中测试如果shell函数返回值(通过echo-ing),并且Perl程序需要它们,则使用“反引号”(操作符形式的qx)而不是system
$
echo
system
perl -we'$ret = qx(bash -c "f1 args-for-f1"); print $ret'
这会将一个(可能)多行字符串(包含所有输出行)分配给标量$ret。或者
$ret
perl -we'@ret = qx ...'
将输出线作为@ret阵列的元素。参见How to call a function (defined in shell script) in a Perl script。
@ret
yjghlzjz2#
您是否为进程提供了一种与要在其中运行命令的bash进程对话的方法?如果没有,您可以启动一个新的bash,并在其中运行命令。
bash
my $bash_cmd = <<'.'; function fun1() { echo "abc"; } fun1 . system "bash", "-c", $bash_cmd;
2条答案
按热度按时间l7wslrjt1#
函数可以在bash中导出,然后在子shell中调用
(其中
$
表示shell提示符)在bash 5.1.8(1)中测试
如果shell函数返回值(通过
echo
-ing),并且Perl程序需要它们,则使用“反引号”(操作符形式的qx)而不是system
这会将一个(可能)多行字符串(包含所有输出行)分配给标量
$ret
。或者将输出线作为
@ret
阵列的元素。参见How to call a function (defined in shell script) in a Perl script。
yjghlzjz2#
您是否为进程提供了一种与要在其中运行命令的bash进程对话的方法?
如果没有,您可以启动一个新的
bash
,并在其中运行命令。