출력 리디렉션을 사용하여 csh에서 스크립트 호출

출력 리디렉션을 사용하여 csh에서 스크립트 호출

내가 원하는 것:

#!/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"

관련 정보