使用远程机器上的变量通过 ssh 和 shell 脚本执行命令

Jea*_*tin 9 ssh remote shell-script variable-substitution

我想用本地机器上的脚本执行位于远程机器上的命令和脚本。我知道可以使用 执行这些类型的命令ssh,所以我做了:

#!/bin/bash
ssh username@target 'cd locationOf/theScript/; ./myScript.sh'
Run Code Online (Sandbox Code Playgroud)

它完美地工作。我希望这个脚本更通用,使用变量。现在它是:

#!/bin/bash
LOCATION=locationOf/theScript/
EXEC=myScript.sh
ssh username@target 'cd ${LOCATION}; ./${EXEC}'
Run Code Online (Sandbox Code Playgroud)

我得到这个错误: bash: ./: is a directory

我猜远程机器不知道这些变量。那么有没有办法它们导出到目标?

小智 9

我不知道将环境变量导出到目标的简单方法,但如果您替换'". 使用's 字符串'cd ${LOCATION}; ./${EXEC}'被逐字传递,但使用

ssh username@target "cd ${LOCATION}; ./${EXEC}"
Run Code Online (Sandbox Code Playgroud)

变量替换在本地完成。

请注意,值LOCATIONEXEC传递到远程shell,所以如果它们不包含任何shell特殊字符这仅适用。