0

我制作了这个 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: unknown option to `s'

请帮忙

4

5 回答 5

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"
于 2010-03-17T12:25:10.027 回答
1

如果没有仔细计算或测试,我会尝试\在“安全”之后添加另一个,或者可能删除现有的。

此外,您可以将两个 sed 合二为一:sed -e 's/weblogic.policy//' -e 's/security\///'

于 2010-03-17T12:46:49.633 回答
1

使用 Tcl 的 {} 运算符而不是在要发送的字符串周围使用双引号。Tcl 中的 {} 语法相当于 bash 中的单引号,意思是“文字字符串,不解释其内容”。

在 {} 中准确地放置您希望 Tcl/Expect 发送到子进程的内容,一个字符一个字符,不需要额外的引用。

于 2010-04-08T13:14:34.553 回答
0

我认为这太复杂了,无法发送到远程主机。相反,将命令放在一个小的 shell 脚本中并执行它。这样,您就不会因为引用扩展规则、转义等而遇到麻烦。

此外,您应该使用ssh而不是expect运行脚本。expect用于运行ftp没有合适脚本能力的交互式命令。

于 2010-03-17T12:31:07.013 回答
-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 
于 2010-03-17T12:23:12.263 回答