zsh 쉘에서 bash 스크립트 실행

zsh 쉘에서 bash 스크립트 실행

에서 bash 스크립트를 실행하는 데 문제가 있습니다 zsh. 스크립트는 다음과 유사하며 bash에서 실행되어야 합니다.

#!/bin/bash
echo "<235234>"  | egrep -oe [0-9]+

그러나 내 쉘은 기본적으로 에 있으므로 zsh위 스크립트를 실행하려면 프롬프트에 /bin/bash입력하고 zsh를 실행하기만 하면 됩니다 . script.sh.

그러나 이로 인해 오류가 발생합니다.

zsh: no matches found: [0-9]+

(그걸 바꿨어야 했는데 235234).

이 시점에서 나는 혼란스러워서 다음과 같은 질문이 있습니다.

  1. 그렇다면 bash오류가 보고되는 이유는 무엇입니까 zsh?
  2. egrep정규식이 실패하는 이유는 무엇 입니까? 정규식이 나에게 맞는 것 같습니다.

참고: 중요한 경우 스크립트를 수정하면 안 됩니다(여러 사용자가 공유하므로 변경하면 안 됩니다).

감사해요

답변1

스크립트가 올바르게 시작되면 (앞에 다른 주석이 있을 수 없음) 처음에 스크립트를 입력 하지 않고 #!/bin/bash스크립트만 입력하면 실행할 수 있습니다 . 이는 "명령줄에 입력한 것처럼 이 파일의 내용을 실행"(Unix 셸 용어로 "소싱"이라고 함)을 의미하는 include 문입니다./path/to/script.sh..

bash를 실행하고 스크립트를 가져오는 것이 작동합니다. 내 생각에는 어떤 경우에는 bash가 자동 시작되었지만 zsh를 선호하므로 bash가 자동으로 zsh로 전환되도록 설정했습니다 . exec zsh아마도 . ~/.bashrc, 즉 ~/.profile, 그런 다음 그대로 두십시오 .bashrc. zsh터미널에서 실행 하려면 SHELL환경 변수를 설정합니다.

# in ~/.profile
export SHELL=/bin/zsh
if [ -t 1 ]; then exec $SHELL; fi

안타깝게도 스크립트에 오류가 있기 때문에 수정할 수 없습니다. Bash에서도 괄호를 묶어야 합니다. 현재 디렉토리에 호출된 파일이 있는 경우 3+호출은 일련의 임의 숫자가 아닌 egrep하나 이상의 숫자 발생을 검색합니다 . 3라는 파일이 있고 3+라는 파일이 있는 경우 4+호출은 egrep해당 파일에서 3s를 검색합니다 4+. 여기서 bash와 zsh의 차이점은 제공된 패턴과 일치하는 파일이 없는 경우에만 나타납니다. bash는 대체되지 않은 패턴으로 명령을 자동으로 실행하는 반면 zsh는 (기본적으로) 오류 신호를 보냅니다.

관련 정보