내가 원하는 것:
#!/bin/csh
# call /myscriptpath/myscript.any and redirect 2>&1 and get retval and output
set my_msg = `/myscriptpath/myscript.any`
set my_ret = `echo $?`
- myscript.any에서 종료 코드를 캡처하는 방법은 무엇입니까?
- 가능하다면 myscript.any에서 메시지를 어떻게 캡처할 수 있습니까?
/myscriptpath/myscript.any 이는 예상대로 bash 명령줄에서 호출됩니다.
답변1
2>&1
동등한 것을 처리 하고 캡처하는 쉬운 방법은 없습니다.표준 에러또한표준 출력, 특히 종료 상태도 원하는 경우. 그러나 두 가지를 파이핑하면 cat
출력 스트림이 병합됩니다.
#!/usr/bin/csh
set my_tmp = ~/.msg.$$.tmp
set my_msg = `( /myscriptpath/myscript.any; echo $? >"$my_tmp" ) |& cat`
set my_ret = `cat "$my_tmp"`
rm -f "$my_tmp"
echo "ret=$my_ret, msg=$my_msg"
또는또는/dev/stout
, Linux 기반 시스템과 같은 환경 에서 실행 중인 경우 my_msg
다음과 같이 할당하십시오.
set my_msg = `/myscriptpath/myscript.any >& /dev/stdout`
더 간단한 변형 은 리디렉션 기능을 사용하는 것 command |& cat
입니다 . /bin/sh
결과 csh
블록은 다음과 같습니다 $my_tmp
.
#!/usr/bin/csh
set my_msg = `sh -c '/myscriptpath/myscript.any 2>&1'`
set my_ret = $status
echo "ret=$my_ret, msg=$my_msg"