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