Поиск не работает в команде «Ожидать отправки»

Я запускаю эту команду bash для отображения содержимого файла somefile.cf в каталоге домена Weblogic.

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 {} \\;

Я предполагаю, что нужно еще немного экранировать специальные символы, или, возможно, я не правильно экранирую существующие. Любая помощь будет оценена по достоинству.


person Sharjeel    schedule 24.03.2010    source источник
comment
Разве вы уже не спрашивали об этом здесь: stackoverflow .com/questions/2462073/sed-does-not-work-in-expect   -  person glenn jackman    schedule 24.03.2010
comment
Часть этого, которую я реализовал в своем вопросе выше. Это другое.   -  person Sharjeel    schedule 24.03.2010


Ответы (3)


дайте нам синтаксическую ошибку найти или bash выкинул на другую сторону. и попробуйте добавить лишний \ или 2 перед точкой с запятой в конце.

Проблема с ожиданием заключается в количестве слоев побегов, которые вам нужны, когда это становится уродливым.

В операторе awk экранируйте все двойные кавычки ( " -> \" )

и получить сообщение об ошибке :)

person Chris Hansen    schedule 24.03.2010
comment
Я получаю эту ошибку, когда запускаю строку, как в моем вопросе, с дополнительными символами после закрытия цитаты при компиляции send echo ; echo 'Weblogic somefile.cf:' ; find \$(/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print ... - person Sharjeel; 25.03.2010
comment
Похоже на двойную кавычку без достаточного количества побегов. Я вставлю его в свой тестовый сценарий, если у меня будет время, а до тех пор... try: send echo ; echo 'Weblogic somefile.cf:' ; find \$(/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | домен grep | 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 кот {} \\; ; эхо\r - person Chris Hansen; 25.03.2010
comment
эта часть действительно должна быть такой длинной? | sed -e 's/weblogic.policy//' -e 's/security\\///' -e 's/dep\\///' | или вы могли бы сделать | sed 's/weblogic.policy//;s/security\\///;s/dep\\///' | - person Chris Hansen; 25.03.2010
comment
Я попытался избежать двойных кавычек, но он по-прежнему выдает те же дополнительные символы ошибки после отправки эха с закрытой кавычкой; echo 'Weblogic somefile.cf:' ; find \$(/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | домен grep | 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 кот {} \\; - person Sharjeel; 27.03.2010

Если у вас есть командная строка со сложными кавычками, которая, как вы знаете, работает в 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.

person eemz    schedule 08.04.2010

В конце строки send отсутствует символ ".

person Armali    schedule 17.01.2014