0

我运行这个 bash 命令来显示 Weblogic 域目录中 somefile.cf 的内容。

find $(/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed -e 's/weblogic.policy//' -e 's/security\///' -e 's/dep\///' | awk -F'/' '{print "/"$2"/"$3"/"$4"/somefile.cf"}' | sort | uniq) 2> /dev/null -exec ls {} \; -exec cat {} \;

我尝试将其合并到一个期望脚本中,并且也转义了一些特殊字符和双引号,但它会引发错误“关闭引号后的额外字符”

send "echo ; echo 'Weblogic somefile.cf:' ; find \$(/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed -e 's/weblogic.policy//' -e 's/security\\///' -e 's/dep\\///' | awk -F'/' '{print \"/\"\$2\"/\"\$3\"/\"\$4\"/somefile.cf\"}' | sort | uniq) 2> /dev/null -exec ls {} \\; -exec cat {} \\;

我想它需要更多的特殊字符转义,或者我可能正确地转义现有的字符。任何帮助,将不胜感激。

4

3 回答 3

0

你的行尾有一个"缺失。send

于 2014-01-17T12:01:34.813 回答
0

给我们在另一边抛出的语法错误 find 或 bash。并尝试在最后的分号前添加一个额外的 \ 或 2。

期望的问题是当它变得丑陋时你需要的转义层数。

在 awk 语句中,转义所有双引号( " -> \" )

并给我一条错误消息:)

于 2010-03-24T12:40:42.667 回答
0

如果您有一个带有复杂引用的命令行,并且您知道它可以在 bash 中使用,那么继续使用 bash 通常会更容易。像这样:

set cmd {find $(/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed -e 's/weblogic.policy//' -e 's/security\///' -e 's/dep\///' | awk -F'/' '{print "/"$2"/"$3"/"$4"/somefile.cf"}' | sort | uniq) 2> /dev/null -exec ls {} \; -exec cat {} \;}
spawn /bin/bash -c $cmd
expect ... whatever is appropriate ...

请注意,我在命令字符串周围使用了 Tcl {} 运算符而不是 ""。这个运算符就像 bash 中的单引号,它的意思是“文字字符串,不要以任何方式解释内容”,在这里很合适,因为我想将这个字符串逐字传递给生成的 bash 子进程。

于 2010-04-08T11:30:52.590 回答