如何在ssh中设置局部变量?

时间:2013-06-01 12:11:04

标签: ssh

我想在ssh命令链中设置一个仅在此环境中使用的局部变量:

#!/bin/sh
my_var='/tmp/wrong_file'
ssh user@server "my_var='/tmp/a_file'; cat $my_var;my_var=123;echo $my_var"
echo $my_var

此示例使用“外部”$my_var。如何修复此问题并在当前ssh连接中“使用”本地定义的变量?根据{{​​3}}中的要求,无需更改或访问'/tmp/wrong_file'中的外部值$my_var

2 个答案:

答案 0 :(得分:2)

您使用的是错误的引号。参数扩展在双引号内执行,但不在单引号内。

#!/bin/sh
my_var=/tmp/wrong_file
ssh user@server 'my_var=/tmp/a_file; cat $my_var;my_var=123;echo $my_var'

答案 1 :(得分:0)

首先:SSH shell和本地shell完全不同,不交换任何环境变量。这是一件好事 - 在不同操作系统架构的机器之间使用SSH时,请考虑LD_LIBRARY_PATH等环境变量。

恕我直言,你的问题的最佳解决方案是将你的命令封装到远程端的shell脚本中,然后可以用参数启动它。 E.g:

<强>远程:

myscript.sh包含:

#!/bin/sh
MY_FILE="$1";
echo "Contents of §MY_FILE:"
cat $MY_FILE

本地

RUn类似

export REMOTE_FILE='/path/to/it'
ssh user@server "/path/to/myscript.sh '$REMOTE_FILE'"