Поиск не работает в команде Expect Send - PullRequest
0 голосов
/ 24 марта 2010

Я запускаю эту команду 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 {} \\;

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

Ответы [ 3 ]

0 голосов
/ 08 апреля 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.

0 голосов
/ 17 января 2014

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

0 голосов
/ 24 марта 2010

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

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

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

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

...