对于回显到 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 说“找不到命令”错误的主要内容,如果未能解决你的问题,请参考以下文章