2010-03-24 3 views
0

weblogic 도메인 디렉토리에 somefile.cf의 내용을 표시하려면이 bash 명령을 실행하십시오.예상 전송 명령에서 찾기가 작동하지 않습니다.

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

아직 여기에서 묻지 않았습니까? http://stackoverflow.com/questions/2462073/sed-does-not-work-in-expect –

+0

위의 질문에서 구현 한 부분 중 하나입니다. 하나는 다르다. – Sharjeel

답변

0

구문 오류 찾기 또는 bash가 상대방에게 던졌습니다. 끝 부분에 세미콜론 앞에 여분의 \ 또는 2를 추가하십시오.

예상치 못한 문제는 추악 할 때 필요한 이스케이프 레이어 수입니다. AWK 문에서

("-> \")의 모든 쌍 따옴표를 도망 갈

하고 복잡한 당신이 작동하는 것을 인용하여 명령 줄이 있으면 나에게 오류 메시지 :

+0

내 질문에 해당 줄을 실행하면이 오류가 발생합니다. 닫기 인용 후 추가 문자 컴파일 중 "보내기"echo; echo 'Weblogic somefile.cf :'; grep security.policy | grep domain | awk -F '=' '{print ... " – Sharjeel

+0

큰 따옴표로 표시됩니다 (예 :/usr/ucb/ps auwwx | grep weblogic | 충분한 시간이 없으면 그때까지 시간이 있으면 테스트 스크립트로 밀어 넣습니다. 시도 : "echo; echo 'Weblogic somefile.cf :'; 찾기 \ $ (/ usr/ucb/ps auwwx | grep weblogic | tr '' '\ n'| grep security.policy | grep 도메인 | awk -F '=' '{print \ $ 2}'| sed -e '/ weblogic.policy // '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}/dev/null -exec ls {} \\; -exec cat {} \\;; echo \ r " –

+0

않습니다 /"\ \ "\ $ 4 \"/ somefile.cf \ "} 이 부분은 정말로 길어야합니다. | sed -e 's/weblogic.policy //'-e 's/security \\ ///'-e 's/dep \\ ///' | 또는 수행 할 수 있습니까? | sed 's/weblogic.policy //; s/security \\ ///; s/dep \\ ///'| –

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 하위 프로세스에 전달하려고하기 때문에 여기에 적합합니다.

0

send 줄 끝에 "이 누락되었습니다.

관련 문제