可以从Perl调用bash函数吗?

oxcyiej7  于 2023-06-23  发布在  Perl
关注(0)|答案(2)|浏览(177)
admin@admin:~$ function fun1() { echo "abc"; }
admin@admin:~$ fun1
abc

我想从Perl调用这个函数。

admin@admin:~$ perl -e 'fun1'
admin@admin:~$

没有输出。我需要做什么来运行我的shell函数和其他变量,或者Perl无法做到这一点?

l7wslrjt

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

perl -we'$ret = qx(bash -c "f1 args-for-f1"); print $ret'

这会将一个(可能)多行字符串(包含所有输出行)分配给标量$ret。或者

perl -we'@ret = qx ...'

将输出线作为@ret阵列的元素。
参见How to call a function (defined in shell script) in a Perl script

yjghlzjz

yjghlzjz2#

您是否为进程提供了一种与要在其中运行命令的bash进程对话的方法?
如果没有,您可以启动一个新的bash,并在其中运行命令。

my $bash_cmd = <<'.';
function fun1() { echo "abc"; }
fun1
.

system "bash", "-c", $bash_cmd;

相关问题