제가 개발 중인 bash 스크립트에서 명령을 실행하고 변수를 캡처하려고 합니다.
- 표준 출력
- 표준 에러
- 상태 코드
이 목표를 달성하는 방법은 무엇입니까? 순서는 입니다 tar
.
나는 가장 표준적인 접근 방식을 시도했습니다.
TAROUTPUT=$(tar -cf arch.tar /path/to/dir)
tar
내가 수행한 일부 작업에 따르면(실제로 실패를 생성하지는 않습니다 )표준 출력이것으로부터 stderr은 변수에 저장되지 않은 것으로 보입니다. 완벽한 솔루션은 TAROUTPUT
(stdout 및 stderr 사용) 및 TARSTATUS
변수입니다.
미리 감사드립니다.
답변1
TAROUTPUT=$(tar -cf arch.tar /path/to/dir 2>&1)
this_is_the_tar_exit_code=$?
답변2
stdout
분리 하려는 경우 stderr
:
craft@engine:~$ tar -cf arch.tar /path/to/dir 1>/tmp/tar_stdout 2>/tmp/tar_stderr; RETCODE=$( echo ${?} );
craft@engine:~$ stdout_var=$( cat /tmp/tar_stdout )
craft@engine:~$ stderr_var=$( cat /tmp/tar_stderr )
craft@engine:~$ echo -e "STDOUT : ${stdout_var}\nSTDERR : ${stderr_var}\nCommand Status: ${RETCODE}"
- 1>/tmp/tar_stdout:
stdout
출력을 임시 파일에 저장합니다. - 2>/tmp/tar_stderr:
stderr
출력을 파일에 저장합니다. - 명령의 반환 코드(종료 상태)는
${?}
변수에 저장됩니다.