查找在“期望发送”命令中不起作用

时间:2010-03-24 10:22:20

标签: bash find send expect

我运行此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 {} \\;

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

3 个答案:

答案 0 :(得分:0)

给我们语法错误find或bash扔在另一边。 并尝试在分号结束前添加额外的\或2。

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

在awk语句中,去掉所有双引号(“ - > \”)

并给我一个错误消息:)

答案 1 :(得分: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子进程。

答案 2 :(得分:0)

"行末尾缺少send