对于回显到 telnet 命令的数据,shell 说“找不到命令”错误

Posted

技术标签:

【中文标题】对于回显到 telnet 命令的数据,shell 说“找不到命令”错误【英文标题】:shell says "command not found" error for data echoed to a telnet command 【发布时间】:2014-03-29 18:56:53 【问题描述】:
find /data/backup/ -name 20140202* -exec awk -F"|" '$23!=0 print"|"$14"|"$23'        
\; > Day1.txt

host='XX.XX.XX.XX'
user='root'
passwd='root'
(
echo "$user"
echo "$passwd"
echo "cd /data/"
echo "find /data/backup/ -name rec20140202* -exec awk -F"|" '$23!=0 print"|"$14"|"$23'  
 \; > remoteDay1.txt"
echo "exit" )| telnet "$host"

在上面的代码片段中,第一个 find 命令工作正常,但第二个 find 命令(在 telnet 部分内)导致以下错误:


testnew.sh: line 27: '3!=0 print: command not found
testnew.sh: line 27: 4: command not found
testnew.sh: line 27: 3: command not found
testnew.sh: line 27: '  \; > remoteDay1.txt: command not found
Connection closed by foreign host.

请帮忙

【问题讨论】:

【参考方案1】:

这是你的问题:

echo "find /data/backup/ -name rec20140202* -exec awk -F"|" '$23!=0 print"|"$14"|"$23' 

您将 echo 参数双引号并在 -F"|" 中使用双引号甚至在 awk 脚本中。 然后,shell 尝试构建一个 4 程序管道,相当于

 echo "find /data/backup/ -name rec20140202* -exec awk -F" |
 " '$23!=0 print"                                         |
 "$14"                                                     |
 "$23'  \; > remoteDay1.txt"

由于 shell 的 位置参数 $1$2 为空,因此您得到的正是您所描述的错误。 如果你想要双引号中的双引号,你需要将它们转义:

echo \"foo\"

回声 "foo" 包括引号。 请注意,无法使用单引号字符串来引用单引号。您还想从 shell 扩展中隐藏 $23 等。将它们转义为\$。我建议使用

echo "find ... -F\"|\" '\$23!=0 print \"|\"\$14\"|\"\$23'  \;>remoteDay1.txt"

【讨论】:

以上是关于对于回显到 telnet 命令的数据,shell 说“找不到命令”错误的主要内容,如果未能解决你的问题,请参考以下文章

for循环中的多个do命令:将字符串回显到文件然后重定向到命令窗口

交互式CLI promt,带PHP,无需回显到终端

使用Windows命令行将多行环境变量回显到文本文件

使用 VBScript 将代码回显到文件中

在批处理脚本中回显到多个文件

将json数据回显到form表单