EOF内部的grep命令不';t似乎正在远程主机上执行[UNIX BASH]

EOF内部的grep命令不';t似乎正在远程主机上执行[UNIX BASH],bash,unix,Bash,Unix,以下是供参考的代码块:- 输出: 我已经用echo检查了变量值,这些看起来很好。 但我想要实现的是使用grep搜索远程主机上的日志,grep不提供任何输出 ${log\u path}中的目录的 做 对于${host}中的主机 做 如果[[“${userinputserverhost}”==“${host}”]] 然后 ssh-q-Tusername@userinputserverhost“bash-s”首先,清除grep周围的所有垃圾。 其次,你的VAR报价过高。 第三,如果可以的话,跳过“ba

以下是供参考的代码块:-

输出: 我已经用echo检查了变量值,这些看起来很好。 但我想要实现的是使用grep搜索远程主机上的日志,grep不提供任何输出

${log\u path}中的目录的

做
对于${host}中的主机
做
如果[[“${userinputserverhost}”==“${host}”]]
然后

ssh-q-Tusername@userinputserverhost“bash-s”首先,清除grep周围的所有垃圾。
其次,你的VAR报价过高。
第三,如果可以的话,跳过“bash-s”

ssh -q -T username@userinputserverhost <<-'EOF' 2>&1 | tee -a ${LogFile}
   echo -e "Fetching details: \n"
   grep -A 5 -s "${ID}" "${dir}"/archive/*.log
EOF
那更像是品味的问题。如果可以,最好将远程脚本写入本地文件并使用它。当然,您可以随时将
set-vx
添加到脚本中,以查看远程执行的内容

cat >tmpScript <<-'EOF'
   echo -e "Fetching details: \n"
   set -vx
   grep -A 5 -s "${ID}" "${dir}"/archive/*.log
EOF

ssh <tmpScript 2>&1 -q -T username@userinputserverhost | tee -a ${LogFile}

cat>tmpScript感谢Paul花时间提出建议/解决方案

几天前我设法让它工作了。我会很高兴地说,你的解决方案100%有效,但我甚至很满意,因为它帮助我学习了一些新东西

FYI-grep-A 5-s“${ID}”“${dir}”/archive/*.log-这将起作用,但仅通过使用shell内置的“declare-p”来声明EOF中的变量。另外,我在某个地方读到,建议使用EOF unqouted,因为它可以毫无困难地将变量扩展到远程主机。 下面的代码在bash中为我工作:


ssh-q-Tusername@userinputserverhost感谢Paul的投入。我已经尝试过用你上面建议的方式使用“grep”,但它不起作用$ID和$log_path是用户输入,我已经反斜杠了。现在添加了set-vx。这就是我现在在我的脚本中传递的内容:grep-a5-s“\${ID}”\{dir}”/*.log我在终端:+grep-a5-s“${ID}”{dir}*.log”上看到了这一点不确定,但可能是由于EOF,远程主机上没有调用变量的值吗?反斜杠引用美元符号意味着它们不是变量。您告诉解析器美元符号只是字面上的美元符号字符串,而不是变量指示符。删除$dir上的美元符号也使其成为一个字符串。也许您应该告诉我们这些值在代码中的设置位置?我的意思是,
$dir
是在循环中设置的,对吗?把反斜杠去掉,把美元符号放回去。ID来自哪里?我只通过“\${dir}”传递了它。在这里发布时错过了$$ID是来自终端的用户输入,$dir将包含一列值,这些值取自外部“.properties”文件。该列有日志目录,我想在其中使用基于“\${ID}”的grep在多个远程主机上执行搜索。我觉得问题在于在EOF中使用这些变量,因为我在grep之前专门为${ID}&${dir}使用了echo。执行时,未显示这两个变量的值。echo在EOF之外使用时工作。注意:我有4个case语句,每个语句都有相同代码的EOF。对您的另一个问题的回答是${ID}和${dir}的值在EOF块之外定义/获取。我已经搜索了很多关于EOF使用的信息,一些人建议取消EOF,以允许在远程主机上扩展变量,我也这样做了。到目前为止没有任何结果。这让我现在有点紧张。
grep-a5-s“${ID}”“${dir}”/archive/*.log
而不是
grep-a5-s“\${ID}”“\${dir}”/archive/*.log
!先把它修好。如果这没有帮助,请发布更多代码,以便我们了解原因。
cat >tmpScript <<-'EOF'
   echo -e "Fetching details: \n"
   set -vx
   grep -A 5 -s "${ID}" "${dir}"/archive/*.log
EOF

ssh <tmpScript 2>&1 -q -T username@userinputserverhost | tee -a ${LogFile}