2017-12-21 15 views
0

저는 Bash 스크립트에서 rman 명령을 실행 중입니다. 여기에 문서를 사용하여 rman에게 내 명령을 전달합니다. 출력을 캡처하고 동시에 콘솔에 출력 (실시간)하고 싶습니다. 이 솔루션을 찾았지만 여기서는 doc-docs로 작업하는 방법을 모르겠습니다.Bash는 결과를 변수에 저장하고 여기에있는 문서를 사용할 때 콘솔에 출력합니다.

VAR=$(ls | tee /dev/tty) 

내가 현재 실행입니다 :

output=$(rman <<RMAN 
$rman_script 
RMAN 
) 

는이 RMAN 예제에서 나는 또한 output 변수에 저장 그렇다 콘솔에 표준 출력 인쇄 할 수있는 방법을 알고 계십니까? 어떤 도움을 주셔서 감사합니다. 건배. 여기-문서 대신 <<<이 것만하는 입력 재 지정과 같은 구문 적으로 보이는 것을

+1

이것은 Bash 스크립트에 적합하지 않은 것처럼 보입니다. 어쩌면 우스꽝 스러움의 일부는'output = $ (echo "$ rman_script"| rman)'으로 리팩토링 될 수 있지만 나에게 Bash 변수에 대한 입력을 수집하면 이미 의심스러운 냄새가 난다. 문제). – tripleee

+0

나는 선택의 여지가 없다고 생각한다. RMAN 오류를 더 잘 처리 할 수있는 메커니즘을 찾지 못했습니다. (따라서 유일한 선택은 출력과 리턴 코드를 확인하는 것입니다. 변수에 스크립트를 넣는 것이 나쁜 이유는 무엇입니까? 설명 할 수 있습니까? 어떤 로그 메시지를 출력 할 수 있습니다.'echo "$ rman_script" – damian

+0

이 상자는 적절한 설명을하기에는 너무 작습니다. 질문 사이에 약간의 차이점이 있습니다 만, 빈번한 오류는 결과를 선형 적으로 메모리에 저장하는 것을 선호하는 것입니다 쉘 스크립트에서 가장 자연스러운 방법 인 파이프 라인에서의 확장 가능한 처리 – tripleee

답변

0
output=$(rman <<RMAN) 
$rman_script 
RMAN 

참고. 입력은 후속 라인에서 가져옵니다.

+0

이것은 작동하지 않습니다 -'line 43 : warning : here-document at line 43 at end- of-fil e (want'RMAN ')' – damian

+0

''<< RMAN "뒤에 따옴표를 썼을 수 있습니까? 오류 메시지는 'RMAN'이 아니라 'RMAN'을 찾고 있다고 말합니다. – user1934428

1

이 문서는 구문이 약간 다르긴하지만 다른 리디렉션과 다르지 않습니다. 당신이 진정으로 스크립트를 여러 번해야하는 경우

var=$(rman <<\... | tee /dev/stderr 
$rman_script 
... 
) 

이 코드의 대표적인 조각 인 경우, 당신은 수도뿐만 아니라에 의해으로

var=$(rman <<<"$rman_script" | tee /dev/stderr) 

, (왜 다른 변수에 보관?) 어쩌면 함수로 리팩토링 :

rman_script() { 
    rman <<\____HERE 
     Actual script 
     Probably multiple lines 
____HERE 
} 

var=$(rman_script | tee /dev/stderr) 

당신은 내가 /dev/stderr 대신 /dev/tty으로 사용할 것을 알 수 있습니다. 스크립트를 가지고 있으면 스크립트가 정말로 짧고 단순하지 않은 한 tty를 필요로하고 피해야합니다. 대화식으로 사용하는 것이 이치에 맞습니다 (암호 조작은 때로는 피하기 힘든 하나의 마음으로 생각합니다).