目前我通過ssh方式連接到遠程計算機執行用perl的系統運行腳本:傳遞一個環境變量的bash腳本通過ssh在Perl系統
system("ssh -t remote $dir/bashscript> $dir/stdout.stdout 2> $dir/stderr.stderr &");
我想在一個環境變量傳遞給bashscript我的遠程機器(一個目錄是特定的)。什麼是最好的方式來做到這一點?我應該在我的bashscript中添加什麼來接受這個論點?
目前我通過ssh方式連接到遠程計算機執行用perl的系統運行腳本:傳遞一個環境變量的bash腳本通過ssh在Perl系統
system("ssh -t remote $dir/bashscript> $dir/stdout.stdout 2> $dir/stderr.stderr &");
我想在一個環境變量傳遞給bashscript我的遠程機器(一個目錄是特定的)。什麼是最好的方式來做到這一點?我應該在我的bashscript中添加什麼來接受這個論點?
試試這個:
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
訪問值。
與所有@ redneb的警告的約消毒輸入
ssh remotehost FOO=bar \; export FOO \; script > out 2> err
,或者如果你是確保遠程主機上的外殼會bash
,更緊湊的
ssh remotehost export FOO=bar \; script > out 2> err
爲什麼會是危險嗎? – acbh
如果遠程服務器允許,使用'ssh -o SendEnv = FOO ...'會更可取。 – chepner
還有什麼是最好的方式來重構我的bash腳本來正確接受$ FOO? – acbh