명령의 출력을 시스템 로그로 보내려고 하는데 이것이 지금까지 얻은 결과입니다.
#!/bin/bash
log()
{
logger -s -t $(basename $0) "$@"
}
/bin/echo "test" 2>&1 | (log)
이것은 아주 잘 작동합니다!
[root@server bin]# sh /var/tmp/script.sh
script.sh: test
그러나 로그 메시지 시작 부분에 문자열을 추가하려고 하면 작동하지 않습니다!
#!/bin/bash
log()
{
logger -s -t $(basename $0) "DEBUG: $@"
}
/bin/echo "test" 2>&1 | (log)
이것이 출력이다
[root@server bin]# sh /var/tmp/script.sh
script.sh: DEBUG:
$@/$* 변수의 압축을 풀고 원래 명령의 표준 출력을 잃지 않고 로그 메시지에 접두사를 추가하려면 어떻게 해야 합니까?
답변1
문서화된 동작은 다음과 같습니다.
정보
이 메시지를 로그에 기록하십시오. 지정되지 않고
-f
플래그가 제공되지 않은 경우 표준 입력에 기록하십시오.
다행히도 로거의 표준 입력에 필요한 정보를 추가할 수 있습니다.
log()
{
{
printf "DEBUG: $@" # Prepends the prefix.
cat # Outputs the original input.
} | logger -s -t $(basename $0)
}
답변2
함수에 인수를 전달하는 것은 읽기와 같 $1
거나 다를 수 있습니다 .$@
stdin
stdin
먼저 데이터를 얻어야 합니다 . 다음은 이상적인 솔루션은 아니지만 힌트를 줄 것입니다.
#!/bin/bash
log()
{
read INPUT
logger -s -t $(basename $0) "DEBUG: $INPUT"
}
echo "test" | (log)