Re: the below patch/email from Jie Zhang in 2008. I've recently run into a problem with setting remote env vars and the patch given resolves it. The last time this was talked about there didn't appear to be a resolution and the patch wasn't committed. was there a reason for it not to be?
From: Jie Zhang Subject: Re: Set environment variable on remote target Date: Fri, 18 Jul 2008 18:45:08 +0800 User-agent: Mozilla-Thunderbird 2.0.0.14 (X11/20080509) ________________________________ Andreas Schwab wrote: Jie Zhang <addr...@hidden> writes: So we have to use single quotes. The updated patch is attached. This will break if the value can contain single quotes. How about using double quotes but escaping ", \, $, and ` using backslash? The patch is attached. Jie diff --git a/lib/rsh.exp b/lib/rsh.exp index 1a207a8..d846887 100644 --- a/lib/rsh.exp +++ b/lib/rsh.exp @@ -225,6 +225,7 @@ proc rsh_upload {desthost srcfile destfile} { # proc rsh_exec { boardname program pargs inp outp } { global timeout + global remote_env verbose "Executing $boardname:$program $pargs < $inp" @@ -261,7 +262,14 @@ proc rsh_exec { boardname program pargs inp outp } { set inp "/dev/null" } - set ret [local_exec "$RSH $rsh_useropts $hostname sh -c '$program $pargs \\; echo XYZ\\\${?}ZYX'" $inp $outp $timeout] + set remote_envs "" + foreach envvar [array names remote_env] { + set tmp_env "$remote_env($envvar)" + # Escape ", \, $, and `, which cannot be protected by double quotes. + regsub -all "(\[\"\\\\$`])" $tmp_env "\\\\\\1" tmp_env + set remote_envs "$remote_envs $envvar=\"$tmp_env\"" + } + set ret [local_exec "$RSH $rsh_useropts $hostname sh -c '$remote_envs $program $pargs \\; echo XYZ\\\${?}ZYX'" $inp $outp $timeout] set status [lindex $ret 0] set output [lindex $ret 1] diff --git a/lib/utils.exp b/lib/utils.exp index 6c9ff98..6325dd8 100644 --- a/lib/utils.exp +++ b/lib/utils.exp @@ -414,3 +414,12 @@ proc getenv { var } { } } +# +# Set an environment variable remotely +# +proc remote_setenv { var val } { + global remote_env + + set remote_env($var) $val +} +
_______________________________________________ DejaGnu mailing list DejaGnu@gnu.org http://lists.gnu.org/mailman/listinfo/dejagnu