bash가 특정 별칭의 구문 분석 및 유효성 검사를 중지하도록 할 수 있습니까? info `dnf check-update

Fedora 25를 사용하고 있으며 내 bash 프로필에 다음 별칭을 추가했습니다.

alias releasenotes="dnf updateinfo --refresh info `dnf check-update | cut -d '.' -f 1 | xargs` | less"

( https://bugzilla.redhat.com/show_bug.cgi?id=1405191dnf updateinfo info 때문에 스트레이트 업을 사용할 수 없습니다 )

내 별칭은 작동하지만 명령을 실행하는 데 약 10 초가 걸리며, bash는 프로파일이 소스 될 때 모든 별칭을 구문 분석하고 유효성 검증하므로 새 쉘을 작성하면 10 초가 정지됩니다. 이것은 성가신 일입니다.

bash가 별칭을 구문 분석하고 유효성을 검사하지 않도록 할 수있는 방법이 있습니까?



답변

가장 좋은 추측은 별칭 정의 주위에 작은 따옴표 를 사용해야한다는 것입니다 .

큰 따옴표를 사용할 때 셸 변수는 별칭 정의 단계 (구문 분석 및 유효성 검사와 같은)와 백틱 또는 $ (명령)과 같은 셸 대체로 내용으로 대체됩니다.

더 나은 설명은이 유닉스 SE 질문에 있습니다 !

그래도 프롬프트가 다시 빠르게로드되지 않으면 별명 대신 쉘 함수를 정의하십시오.

편집 : 컷 인수를 언급 한 빠른 인용과 같이 큰 따옴표로 바꾸는 것을 잊지 마십시오.


답변

bash인용 된 문자열을 해석 중이며 해당 해석은 내장 dnf check-update명령을 실행합니다 . 이 실행은 별명을 지정하는 기본 dnf updateinfo명령이 아니라 별명 정의 중에 시간이 걸리는 것 입니다. 다음을 기반으로 한 훌륭한 예를 시도 sleep하고 alias그 자체가 5 초가 걸리는 방법에 주목하십시오 .

alias sleep5="echo 'wake' ; `sleep 5` ; echo 'done'"

해석을 피하려면 작은 따옴표를 사용하십시오.

alias releasenotes='dnf updateinfo --refresh info `dnf check-update | cut -d "." -f 1 | xargs` | less'

cut인수를 큰 따옴표 로 바꾸는 것을 잊지 마십시오 .