Bash heredoc在通过管道传输到ssh时失败
我正在尝试使用herdeoc通过ssh执行命令。当我使用“EOF”样式时:Bash heredoc在通过管道传输到ssh时失败,bash,tcsh,Bash,Tcsh,我正在尝试使用herdeoc通过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 &
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
)
我所读到的一切都表明这不应该发生。如果我cat/tmp/command.csh
将herdoc添加到一个文件中,则命令与我在远程框上的预期匹配,并按预期工作
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
)
这个脚本在bash中,但是默认的shell是tcsh,这是远程正在运行的,所以它不是因为csh命令在远程登录的bash窗口中运行
你知道我做错了什么吗?你考虑过在shell命令行而不是在程序文本的带内传递参数吗?这样你就可以继续使用
了,有没有可能把代码放到一个脚本中,然后复制到服务器上执行呢?grep'\/bin\/bash'
是如何变成egrep-v'grep | tail | vi | csh'
?顺便说一句,这是一个非常讨厌的命令行。我会考虑让它<代码> PS-EFGAWK/TestStudio/& &!grep | tail | vi | csh/{print$2}'
--没有理由在两个组件都可以的情况下使用四个单独的组件。顺便说一句,没有必要在grep
中转义/
。
set pid=`ps -ef | grep TestPatterns | egrep -v 'grep|tail|vi|csh' | gawk '{print }'`