실행 된 명령에서 오류 메시지를 캡처하는 방법은 무엇입니까? 된 각 명령의 모든

자동화 된 서버 강화 스크립트를 작성해야했으며 필요한 것은 실행 된 각 명령의 모든 출력에 대한 보고서입니다. 오류 메시지를 문자열 안에 저장하고 텍스트 파일에 추가하고 싶습니다.

이 명령을 실행했다고 가정 해 봅시다.

/sbin/modprobe -n -v hfsplus

내 컴퓨터에서 이것을 실행하면 다음과 같습니다.

FATAL: Module hfsplus not found

해당 오류 메시지를 문자열 안에 어떻게 저장할 수 있습니까? 도움을 주시면 감사하겠습니다. 감사!



답변

errors 명령을 리디렉션하여 수행 할 수 있습니다.

/sbin/modprobe -n -v hfsplus 2> fileName 

대본으로

#!/bin/bash
errormessage=$( /sbin/modprobe -n -v hfsplus 2>&1)
echo $errormessage

또는

 #!/bin/bash
errormessage=`/sbin/modprobe -n -v hfsplus 2>&1 `
echo $errormessage

오류 >>대신에 오류를 추가하려면>

“예기치 않은 토큰`& ‘근처의 구문 오류”오류를 피하고 사용 2>&1하지 2> &1마십시오.


답변

bash 스크립트에 문자열로 저장하기 만하면됩니다.

X=`/sbin/modprobe -n -v hfsplus 2>&1`
echo $X

명령이 실행될 때 메시지가 표시되므로 조금 더 나을 수 있습니다.

TMP=$(mktemp)
/sbin/modprobe -n -v hfsplus 2>&1 | tee $TMP
OUTPUT=$(cat $TMP)
echo $OUTPUT
rm $TMP


답변

나는 이런 식으로 오류를 캡처

. ${file} 2>&1 | {
  read -d "\0" -t 0.01 error
    [ -z "$error" ] || log_warn Load completion ${file} failed: "\n${error}"
}

소스가 실패하면 오류를 캡처하고 기록합니다. log_warn은 단순한 기능입니다.

BTW, 나는 이것을 내 도트 파일 에서 사용합니다.


답변

파일에 추가하려면 /sbin/modprobe -n -v hfsplus 2>> filename


답변

최신 bash 버전 (즉, bash 4.1 이상) :

$ msg=$(ls -la nofile 2>&1)
$ echo $msg
ls: cannot access nofile: No such file or directory
$ 


답변

변수에 오류 메시지를 반환하려면 간단히;

error=$(/sbin/modprobe -n -v hfsplus 2>&1 1>/dev/null)

echo $error


답변