我创建了这个bash单行程序,用于列出与其完整路径一起运行的Weblogic实例。当我从shell运行它时,这很有效。
/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort
我试图将其纳入期望脚本
send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort ; echo ; echo\r"
但是我得到了这个错误sed:-e expression#1,char 13:`s'的未知选项
请帮忙
答案 0 :(得分:2)
可能是
中的\
字符
sed 's/security\///'
在期望的上下文中需要额外的转义,例如
send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\\///' | sort ; echo ; echo\r"
答案 1 :(得分:1)
如果不仔细计算或测试,我会尝试在“安全性”之后添加另一个\
,或者可能删除现有的sed -e 's/weblogic.policy//' -e 's/security\///'
。
此外,您可以将两个seds组合成一个:{{1}}
答案 2 :(得分:1)
在要发送的字符串周围使用Tcl的{}运算符而不是双引号。 Tcl中的{}语法等同于bash中的单引号,意思是“文字字符串,不解释其内容”。
在{}里面放置你想要的Tcl / Expect发送到子进程的字符,字符的字符,不需要额外的引用。
答案 3 :(得分:0)
我认为这太复杂了,无法发送到远程主机。相反,将命令放在一个小的shell脚本中并执行它。这样,您就不会因为引用扩展规则,转义等而遇到麻烦。
此外,您应该使用ssh
而不是expect
来运行脚本。 expect
用于运行没有合适脚本功能的ftp
等交互式命令。
答案 4 :(得分:-1)
您可以尝试删除单引号并再次运行命令。
send "....... sed s/weblogic.policy// | sed s/security\/// ..."
最可能引用的问题。如果不行,请尝试hlovdal
同时,你的一些长命令可以合并
/usr/ucb/ps auwwx |grep weblogic| tr ' ' '\n'|awk '/security.policy/&&/domain/{gsub("weblogic.policy|security","",$2);print $2}|sort