2

我想在仅在此环境中使用的 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 连接“中”的变量?无需更改或访问 中的外部值'/tmp/wrong_file'$my_var通过 ssh 将目录列表分配给 bash 脚本中的变量中所述。

4

2 回答 2

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'
于 2013-06-01T12:17:45.560 回答
0

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

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

偏僻的:

myscript.sh 包含:

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

当地的:

运行类似的东西

export REMOTE_FILE='/path/to/it'
ssh user@server "/path/to/myscript.sh '$REMOTE_FILE'"
于 2013-06-01T12:18:31.580 回答