通过ssh从perl系统将环境变量传递给bash脚本

时间:2016-09-28 19:46:46

标签: bash perl

目前我正在使用perl系统通过sshing到远程机器来执行运行脚本:

system("ssh -t remote $dir/bashscript> $dir/stdout.stdout 2> $dir/stderr.stderr &");

我想将一个环境变量传递给我的远程机器上的bashscript(一个特定的目录)。最好的方法是什么?我应该在我的bashscript中添加什么才能接受这个论点?

2 个答案:

答案 0 :(得分:1)

试试这个:

system("ssh -t remote FOO='dir/dir/filename.stderr' $dir/bashscript> $dir/stdout.stdout 2> $dir/stderr.stderr &");

请注意,如果值来自不受信任的来源,则这可能很危险。在传递之前你应该真的逃避这个值。例如,你可以这样做:

my $foo='some value here';
$foo=~s/'/'\\''/g; # escape the '
system("ssh -t remote env FOO='$FOO' $dir/bashscript> $dir/stdout.stdout 2> $dir/stderr.stderr &");

在任何一种情况下,bashscript都可以通过$FOO访问该值。

答案 1 :(得分:0)

@ redneb的所有警告都是关于消毒输入

ssh remotehost FOO=bar \; export FOO \; script > out 2> err

或者如果你确定远程主机上的shell是bash,则更紧凑

ssh remotehost export FOO=bar \; script > out 2> err