쉘 스크립트를 통해 정규식을 확인할 때 "권한이 거부되었습니다" 메시지 받기

쉘 스크립트를 통해 정규식을 확인할 때 "권한이 거부되었습니다" 메시지 받기

다음 쉘 스크립트를 확인하십시오.

#!/bin/bash
check=yes
if [[ $check =~ yes|no ]]; then
    echo yes or no.
else
    echo I did not understood the pattern.
fi

내 OSX에서 실행하면 모든 것이 예상대로 작동합니다. yes or nor.메시지를 남겨주세요 . 하지만 Ubuntu 14.04.5 LTS 서버에서 실행할 때 오류가 발생합니다.

teste.sh: 3: teste.sh: [[: Permission denied
teste.sh: 3: teste.sh: no: Permission denied
I did not understood the pattern.

OSX 및 Ubuntu 쉘 버전이 확인되었습니다. OSX는 이전 쉘 버전을 제공합니다.

[email protected]:/tmp/>$SHELL --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Copyright (C) 2007 Free Software Foundation, Inc.

우분투에서는:

t4h@web129:~$ $SHELL --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

나에게 쉘 정보는 별로 도움이 되지 않습니다.

모든 *nix 시스템에서 동일하게 실행되고 다른 셸 버전과 호환되는 셸에서 정규식을 확인하는 다른 방법이 있습니까?

답변1

이것은 인터프리터로 사용해야 하는 스크립트입니다 bash.bash

를 사용하여 실행할 때는 sh을 사용하지 않습니다 bash. 예, 일부는 sh실제로 bash위장되어 있지만 중요하지 않습니다( bash모든 경우에 "정상"처럼 작동하지는 않습니다). shand를 마치 and bash인 것처럼 상호 배타적인 통역사로 취급합니다 (즉, 이들을 섞으려고 하지 마십시오).perlpython

스크립트 실행

$ bash teste.sh

또는 실행 가능하게 만들고 직접 실행하십시오.

$ chmod +x teste.sh
$ ./teste.sh

마지막 접근 방식이 더 나을 수도 있습니다. 이를 통해 스크립트는 #!어떤 인터프리터를 사용해야 하는지 -line을 통해 결정할 수 있습니다.

관련 정보