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`