'hhighlighter' 래퍼 스크립트에 명령을 찾을 수 없음이 표시됩니다.

'hhighlighter' 래퍼 스크립트에 명령을 찾을 수 없음이 표시됩니다.

래퍼 스크립트 "hhighlighter"를 다음에서 얻었습니다.https://github.com/paoloantinori/hhighlighter표준 출력에 원하는 색상을 지정하십시오. ack-grep 설치 지침을 따르고 ~/.bashrc에 ack=ack-grep에 대한 별칭을 만들고 ~/.bashrc에 h() 함수를 넣었으며 터미널에 입력하면 모든 것이 잘 작동합니다. 그러나 똑같은 명령을 bash 스크립트에 넣으면 명령을 찾을 수 없다는 메시지가 나타납니다. 여기에 예를 들겠습니다.

root@kali:~# echo "abcd" | h a b c d
abcd

이것이 내 스크립트의 모습입니다

#!/bin/bash  
echo "abcd" | h a b c d

입력한 명령과 정확히 동일하지만 스크립트를 실행할 때의 출력입니다.

root@kali:~# ./test.sh
./test.sh: line 1: h: command not found

터미널에 직접 입력할 때는 어떻게 작동하지만 bash 스크립트에서 똑같은 명령을 사용할 때는 어떻게 작동합니까? 이 문제를 해결하기 위해 ~/.bashrc가 필요하거나 다른 것이 필요한 경우 알려 주시기 바랍니다. 현재 4일 동안 이 문제에 대한 해결 방법이 없습니다.

답변1

문제는 bash가 비대화식으로 시작되면 읽지 않는다는 것입니다 ~/.bashrc.

h()그래서 대본을 읽어야 합니다 .

스크립트에서 별칭을 사용하려면 다음을 수행해야 합니다.

  1. 스크립트에서 별칭 허용shopt -s expand_aliases

  2. 스크립트에서 별칭을 정의합니다.

별칭에 대한 대안은 셸 함수를 정의하는 것입니다(대화형 및 비대화형 셸에서 동일하게 작동).

foo () {
  bar "$@"
}

그러나 스크립트를 실행하는 셸이 다시 초기화되면 실행 중인 셸의 별칭이나 함수 정의를 스크립트로 가져올 수 없습니다.

답변2

나에게 도움이 된 해결책은 스크립트가 #!/bin/bash -i헤더를 사용하여 대화형 모드에서 실행되도록 하는 것이었습니다.

고급 Bash 스크립팅 가이드경고하다그러나 이상한 결과에 대해서는 다음과 같습니다.

이로 인해 오류가 없더라도 잘못된 스크립트 동작이나 오류 메시지가 표시될 수 있습니다.

그러나 나는 이와 같은 것을 관찰하지 못했습니다.

관련 정보