微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

传输到 ssh 时,heredoc 失败

如何解决传输到 ssh 时,heredoc 失败

我正在尝试使用 heredoc 通过 ssh 执行命令。当我使用“EOF”样式时:

result=$(ssh $quiet -T ${G_IPAddressBase}${G_TGP} <<- 'EOF'
set pid=`ps -ef | grep TestPatterns | egrep -v 'grep|tail|vi|csh' | gawk '{print $2}'`
if ( "$pid" != "" ) then
        echo "TestPatterns ($pid) terminated"
        kill $pid
else
        echo "TestPatterns down already"
endif
EOF
)

一切正常,因为 $ 和 qrave 标记没有展开。

但是如果我想包含局部变量并使用 \ 来阻止变量被解析,\ 不会阻止 $ 变量按预期解析。

result=$(ssh $quiet -T ${G_IPAddressBase}${G_TGP} <<- EOF
set pid=\`ps -ef | grep $mytaskName | grep '\/bin\/bash' | gawk '{print \$2}'\`
if ( "\$pid" == "" ) then
        echo "ERROR: $mytaskName cored"
else
        if ( -f "$mytaskLogpath" ) then
                set agent1Done=1
        else
                echo "ERROR:  $mytaskName didn't make a report file"
        endif
endif
EOF
)

pid 被设置为空白,因为它在远程端看起来像这样:

set pid=`ps -ef | grep TestPatterns | egrep -v 'grep|tail|vi|csh' | gawk '{print }'`

我所读到的一切都表明这不应该发生。如果我 cat << EOF > /tmp/command.csh文件的heredoc 命令匹配我对远程框的期望并按预期工作。

此脚本在 bash 中,但认 shell 是 tcsh,这就是远程正在运行的,所以不是因为 csh 命令在远程登录的 bash 窗口中运行。

知道我做错了什么吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。