2016-09-28 65 views
1

目前我通過ssh方式連接到遠程計算機執行用perl的系統運行腳本:傳遞一個環境變量的bash腳本通過ssh在Perl系統

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

我想在一個環境變量傳遞給bashscript我的遠程機器(一個目錄是特定的)。什麼是最好的方式來做到這一點?我應該在我的bashscript中添加什麼來接受這個論點?

回答

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訪問值。

+0

爲什麼會是危險嗎? – acbh

+0

如果遠程服務器允許,使用'ssh -o SendEnv = FOO ...'會更可取。 – chepner

+0

還有什麼是最好的方式來重構我的bash腳本來正確接受$ FOO? – acbh

0

與所有@ redneb的警告的約消毒輸入

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

,或者如果你是確保遠程主機上的外殼會bash,更緊湊的

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