我想在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
。
答案 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'"