앨리어싱 시 다른 출력

앨리어싱 시 다른 출력

다음과 같은 별칭으로 명령 세트가 있습니다.

alias badalarm="cat ~/sagLogs/* | grep -I 'failed to generate expected' | awk '{print $4}' | sort | uniq | tee /dev/tty | wc -l" 

그것은 나에게 다음과 같은 결과를 제공합니다.

$ badalarm
alg-t1sg0103
alg-t1sg0104
all-t1sg0006
all-t1sg0009
input)
5

그러나 CLI에서 직접 명령을 실행하면 다음과 같은 결과가 나타납니다.

$ cat ~/sagLogs/* | grep -I 'failed to generate expected' | awk '{print $4}' | sort | uniq | tee /dev/tty | wc -l
alg-t1sg0103
alg-t1sg0104
all-t1sg0006
all-t1sg0009
4

별칭 버전이 다른 파일을 선택하는 이유는 무엇입니까? 내가 사용할 때
cat ~/sagLogs/* | grep 'failed to generate expected'

나는 다음과 같은 결과를 얻습니다.

[...]
Apr:09:09:31:01:         >>>1 on all-t1sg0009 failed to generate expected 134
Apr:09:09:31:01:         >>>2 on all-t1sg0009 failed to generate expected 107
Apr:09:09:31:01:         >>>2 on all-t1sg0009 failed to generate expected 108
Apr:10:08:00:35:         >>>1 on all-t1sg0009 failed to generate expected 133
Apr:10:08:00:35:         >>>1 on all-t1sg0009 failed to generate expected 107
Binary file (standard input) matches

별칭에서 "표준 입력" 파일을 생략하는 방법은 무엇입니까?

답변1

별칭을 선언할 때 명령 $4의 는 awk큰따옴표로 묶입니다(전체 별칭 문자열이 큰따옴표로 묶이기 때문입니다). 이는 쉘에 의해 빈 문자열로 확장될 가능성이 높다는 것을 의미합니다. $4작은 따옴표 안의 내용은 중요하지 않습니다.이내에큰따옴표.

대신 셸 기능을 사용해 보세요.

badalarm () {
    cat "$HOME"/sagLogs/* |
    grep -I 'failed to generate expected' |
    awk '{ print $4 }' | sort -u |
    tee | wc -l
}

이렇게 하면 인용 문제가 방지됩니다.

tee또한 파이프를 약간 단축하고 TTY로 직접 출력하는 것을 stdout으로 출력하는 것으로 대체했습니다(및의 출력이 그곳으로 전송 되도록 wc -l).

관련 정보