명령을 실행하고 모든 것을 bash의 변수에 저장합니다.

명령을 실행하고 모든 것을 bash의 변수에 저장합니다.

제가 개발 중인 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출력을 파일에 저장합니다.
  • 명령의 반환 코드(종료 상태)는 ${?}변수에 저장됩니다.

관련 정보