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


20

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

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

/sbin/modprobe -n -v hfsplus

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

FATAL: Module hfsplus not found

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


var = $ (/ sbin / modprobe -n -v hfsplush) 명령을 실행 한 다음 표시합니다. $ var 그러나 여전히 문자열 내의 오류 메시지를 캡처하지 않습니다.
Miguel Roque

답변:


23

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마십시오.


나는 그 접근법을 시도했으며 텍스트 파일에 직접 저장합니다. 내용을 쉽게 포맷 할 수 있도록 문자열 안에 먼저 저장하고 싶습니다.
Miguel Roque

1
@MiguelRoque 업데이트보기
Networker

1
출력을 HEREDOC에 넣으려고 했는데도 효과가있었습니다. 감사합니다 @Networker!
Miguel Roque

1
"& 근처에 구문 오류가 발생하여> 뒤에 공백이 없어 졌기 때문에 누군가 내가 편집 한 내용을 되돌 렸습니다. 정당화가 좋았을 것입니다.
Pierre.Sassoulas

다음과 같은 이유로 편집을 시도했습니다. "예기치 않은 토큰`& '근처의 구문 오류"오류를 피하기 위해 2> & 1이 아니라 2> & 1을 사용하십시오.
peter_v

15

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

1
명령 대체에는 항상 백틱 대신 $ (command)를 사용하십시오. 더 낫다 :)
Sree

나는 그것이 더 낫다는 것을 안다.
KolonUK

4

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

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

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

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



2

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

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

0

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

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

echo $error
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.