我正在尝试ssh
到shell脚本中的另一台服务器并运行一些脚本。
目前我的行看起来像:
ssh user@$SERVER '$(typeset -a >> /dev/null); PROFILE_LOCATION=`locate db2profile| grep -i $INST_NAME| grep -v bak`; . $PROFILE_LOCATION; function1; function2;'
我已经尝试了'
和"
,以及使用\;
或';'
如何将我ssh
中当前shell脚本中的变量用于另一台服务器并运行多个命令?谢谢!
答案 0 :(得分:1)
如果你想要函数声明,而你的shell是bash,请使用typeset -p
而不是typeset -a
(它将提供变量的文本转储,但不提供函数)。此外,您需要在将在本地评估它的上下文中实际运行它(并确保您的远程shell是理解它的东西,而不是/bin/sh
)。
以下点击所有这些要点:
evaluate_db2profile() {
local db2profile
db2profile=$(locate db2profile | grep -i "$INST_NAME" | grep -v bak | head -n 1)
[ -n "$db2profile" ] && . "$db2profile"
}
ssh "user@$SERVER" bash -s <<EOF
$(typeset -p)
evaluate_db2profile
function1
function2
EOF
<<EOF
而不是<<'EOF'
,因此typeset -p
命令在本地运行并替换为heredoc。 (您也可以通过在单行公式中使用双引号而不是单引号来实现此目的,但请参见下文。)evaluate_db2profile
作为函数可确保typeset -p
以远程shell可以评估的格式发出它,而无需担心转义。bash -s
可确保shell解释您的函数是bash,而不是/bin/sh
。如果您的代码是为ksh编写的,请运行ksh -s
以达到同样的效果。