![백틱(`)을 사용하여 호출하면 로컬로 생성된 별칭이 사용되지 않습니다.](https://linux55.com/image/63068/%EB%B0%B1%ED%8B%B1(%60)%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%98%B8%EC%B6%9C%ED%95%98%EB%A9%B4%20%EB%A1%9C%EC%BB%AC%EB%A1%9C%20%EC%83%9D%EC%84%B1%EB%90%9C%20%EB%B3%84%EC%B9%AD%EC%9D%B4%20%EC%82%AC%EC%9A%A9%EB%90%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
10개의 다른 단어에 대해 여러 파일을 수집하는 스크립트를 작성하는 동안 이 문제가 발생했습니다.
내가 만든 스크립트는 (축소)
#!bin/bash
alias grep='grep -n'
out=`grep word $1`
산출
some text word
some other text word more text
grep은 작동하지만 별칭을 고려하지 않습니다. 줄 번호 대신 일치하는 줄만 출력합니다( -n
줄 번호의 경우).
이제 다음 명령을 실행하면 제대로 작동합니다.
#!bin/bash
out=`grep -n word $1`
위 스크립트의 출력 및 예상 출력:
233: some text word
532: some other text word more text
스크립트의 여러 위치에 grep 문이 있으며 모든 줄을 편집할 필요가 없습니다. 별칭을 통해 grep을 한 번 재정의하고 싶지만 작동하지 않는 것 같습니다.
여기서 무엇이 잘못되었을 수 있습니까? 별칭을 작동시키려면 어떻게 해야 합니까?
답변1
다음 줄을 잊어버렸습니다.
shopt -s expand_aliases
예를 들어
#!/bin/bash
shopt -s expand_aliases
alias grep='grep -n'
out=$(grep word "$1")
echo "$out"
답변2
문제는 실제 쉘에 대한 별칭을 생성했다는 것입니다. 백틱( 또는 )을 사용하면 $(...)
실행하는 하위 쉘에서 별칭이 무시됩니다(내가 아는 한 별칭은 내보낼 수 없으므로 하위 쉘에서 재정의해야 합니다).
귀하의 경우 아마도 가장 좋은 방법은 명령이 포함된 변수를 설정하는 것입니다. 설명하다:
MY_GREP="grep -n"
out=`${MY_GREP} word $1`