2016-09-28 15 views
1

Derzeit bin Ausführung I run scripts perl-System von sshing in einen Remote-Rechner:Passing eine Umgebungsvariable auf einen Bash-Skript über ssh von Perl-System

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

Ich möchte auf eine Umgebungsvariable mit dem bashscript passieren meine Remote-Maschine (ein Verzeichnis um genau zu sein). Was ist der beste Weg, es zu tun? Und was soll ich in meinem Bashscript hinzufügen, um das Argument zu akzeptieren?

Antwort

1

Versuchen Sie folgendes:

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

Beachten Sie, dass, wenn der Wert von einer nicht vertrauenswürdigen Quelle kommt dies gefährlich sein kann. Sie sollten wirklich den Wert entkommen, bevor Sie so weitergehen. Zum Beispiel könnte man so etwas tun:

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 &"); 

In jedem Fall bashscript den Wert über $FOO zugreifen kann.

+0

warum es wäre, gefährlich? – acbh

+0

Wenn der entfernte Server dies zulässt, wäre die Verwendung von 'ssh -o SendEnv = FOO ...' vorzuziehen. – chepner

+0

auch, was ist der beste Weg, um mein Bash-Skript um $ FOO richtig zu akzeptieren? – acbh

0

Mit allen Vorbehalt der des @ redneb über Eingabe

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

desinfizierende oder wenn Sie sicher sind, dass die Schale auf dem Remote-Host bash sein wird, desto kompakter

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