문제

나는 전체 경로와 함께 실행되는 Weblogic 인스턴스를 나열하는 데 사용하는이 Bash One-Liner를 만들었습니다. 이것은 쉘에서 실행할 때 잘 작동합니다.

/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort

이것을 기대 스크립트에 통합하려고했습니다

send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort ; echo ; echo\r"

그러나 나는이 오류 sed를 얻었다 : -e 표현 #1, char 13 :`s '에 대한 알려지지 않은 옵션

도와주세요

도움이 되었습니까?

해결책

신중하게 계산하거나 테스트하지 않고 다른 추가를 시도 할 것입니다. \ "보안 "이후 또는 기존을 삭제 한 후.

또한 두 SED를 하나로 결합 할 수 있습니다. sed -e 's/weblogic.policy//' -e 's/security\///'

다른 팁

아마 \ 캐릭터

sed 's/security\///'

예상되는 상황에서 추가 탈출이 필요합니다

send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\\///' | sort ; echo ; echo\r"

보내려고하려는 문자열 주위에 이중 인용문 대신 tcl의 {} 연산자를 사용하십시오. tcl의 {} 구문은 "문자 그대로의 내용을 해석하지 않는다"는 Bash의 단일 인용문과 동일합니다.

{} 내부에 TCL/가 원하는 것을 정확하게 넣어 서브 프로세스, 캐릭터의 문자, 추가 인용문이 필요하지 않습니다.

나는 이것이 원격 호스트로 보내기에는 너무 복잡하다고 생각합니다. 대신, 명령을 작은 쉘 스크립트에 넣고 실행하십시오. 이렇게하면 견적 확장 규칙, 탈출 등으로 인해 문제가 발생하지 않습니다.

또한 사용해야합니다 ssh 대신에 expect 스크립트를 실행합니다. expect 대화식 명령을 실행하는 것입니다 ftp 적절한 스크립팅 능력이 없습니다.

단일 따옴표를 제거하고 명령을 다시 실행할 수 있습니다.

send "....... sed s/weblogic.policy// | sed s/security\/// ..."

아마도 가장 인용 한 문제입니다. 괜찮지 않은 경우 제안을 시도하십시오 hlovdal

한편, 당신의 긴 명령 중 일부는 결합 될 수 있습니다.

/usr/ucb/ps auwwx |grep weblogic| tr ' ' '\n'|awk '/security.policy/&&/domain/{gsub("weblogic.policy|security","",$2);print $2}|sort 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top