我运行此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 {} \\;
我想它需要更多的特殊字符转义,或者我可能正确地逃避现有的字符。 任何帮助,将不胜感激。
答案 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
。