변수 로그를 매개변수로 스크립트에 전달하는 방법은 무엇입니까?

변수 로그를 매개변수로 스크립트에 전달하는 방법은 무엇입니까?

다음을 수행하는 스크립트에 로그를 매개변수로 전달하려고 합니다.

#!/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"

왜? 각 함수에는 자체 위치 매개변수 목록이 있습니다. 호출하는 함수에 위치 인수 목록을 제공해야 합니다.

즉, 함수 내부는
기본 스크립트와 동일하지 않습니다.$1filter$1

매개변수가 하나만 필요한 경우:

filter "$1" > "/app/me/logs/${1}.filtered"

그 정도면 충분합니다.

관련 정보