에서 bash 스크립트를 실행하는 데 문제가 있습니다 zsh
. 스크립트는 다음과 유사하며 bash에서 실행되어야 합니다.
#!/bin/bash
echo "<235234>" | egrep -oe [0-9]+
그러나 내 쉘은 기본적으로 에 있으므로 zsh
위 스크립트를 실행하려면 프롬프트에 /bin/bash
입력하고 zsh
를 실행하기만 하면 됩니다 . script.sh
.
그러나 이로 인해 오류가 발생합니다.
zsh: no matches found: [0-9]+
(그걸 바꿨어야 했는데 235234
).
이 시점에서 나는 혼란스러워서 다음과 같은 질문이 있습니다.
- 그렇다면
bash
오류가 보고되는 이유는 무엇입니까zsh
? 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
해당 파일에서 3
s를 검색합니다 4+
. 여기서 bash와 zsh의 차이점은 제공된 패턴과 일치하는 파일이 없는 경우에만 나타납니다. bash는 대체되지 않은 패턴으로 명령을 자동으로 실행하는 반면 zsh는 (기본적으로) 오류 신호를 보냅니다.