다음을 수행하는 스크립트에 로그를 매개변수로 전달하려고 합니다.
#!/bin/bash
filter(){
grep -E "ERROR|FATAL|WARN|Caused|^[[:space:]]" /app/me/logs/$1
}
#read varName
filter > /app/me/logs/${1}.filtered
cat /app/me/logs/${1}.filtered
하지만 아무것도 출력하지 않으며 생성된 로그 파일에도 아무 것도 없습니다. 내가 전달하는 명령은 다음과 같습니다.
>>> log_filter test.log
log_filter는 스크립트의 이름이고 test.log는 필터링하려는 매개변수 로그입니다. 보시다시피 "read varName"이라고 썼는데 각 스크립트에 $1 대신 varName을 전달하면 작동하지만 작동하지 않습니다. 그걸 원해요.
답변1
변화:
filter > /app/me/logs/${1}.filtered
도착하다:
filter "$@" > "/app/me/logs/${1}.filtered"
왜? 각 함수에는 자체 위치 매개변수 목록이 있습니다. 호출하는 함수에 위치 인수 목록을 제공해야 합니다.
즉, 함수 내부는
기본 스크립트와 동일하지 않습니다.$1
filter
$1
매개변수가 하나만 필요한 경우:
filter "$1" > "/app/me/logs/${1}.filtered"
그 정도면 충분합니다.