내 컴퓨터 터미널에서는 sh 스크립트가 제대로 실행되지만 원격 서버에서는 오류가 발생합니다.

내 컴퓨터 터미널에서는 sh 스크립트가 제대로 실행되지만 원격 서버에서는 오류가 발생합니다.

내 컴퓨터에서 실행할 수 있는 이 테스트 sh 스크립트는 모든 것이 작동하면 아무 것도 출력하지 않는 것으로 가정됩니다. scp를 사용하여 작업 중인 폴더의 모든 내용을 원격 서버로 전송했는데 원격 서버에서 실행하면 다음과 같은 오류가 발생합니다.

egrep: Unmatched ) or \)
egrep: Unmatched ) or \)
./script.sh: line 229: ./helperScripts/script2.pl: No such file or directory

내 컴퓨터에서는 이러한 오류가 발생하지 않았으며 이를 확인하면 script2.pl이 helperScripts에 있습니다.

원격 서버에서 sh -version을 실행하면 다음과 같은 결과가 나타납니다.

GNU bash, version 4.1.2(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2009 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.

내 컴퓨터 터미널에서 sh -version을 실행하면 다음과 같은 결과가 나타납니다.

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.

이것이 중요한지 모르겠습니다. 내가 무엇을 할 수 있는지 아시는 분 계신가요? 스크립트를 다시 작성하려고 노력해 왔고 새 스크립트를 만들 때 더 많은 문제가 계속 발생하는 것 같기 때문에 스크립트를 다시 작성할 필요가 없습니다.

답변1

그렇지 않다필요중요하지만 그렇죠.~할 수 있다어떻게 쓰느냐에 따라 중요하다. 그리고 Bourne 쉘 작성 방법을 누구에게나 지적할 수 있는 스크립트를 제공하지 않았습니다. 서로 더 잘 호환되는 BASH 버전을 갖고 싶다면...

설치하다홈브류Mac에서 Terminal.app또는iTerm2.app. 그리고 Homebrew로 BASH( brew install bash)를 설치합니다. 그런 다음 Mac에서 쉘을 변경하십시오 chsh -s /usr/local/bin/bash. 로그 아웃. 로그인하세요. 이제 macOS/OS X에서 BASH 4.4를 사용할 수 있습니다. 이는 현재 사용 중인 다른 BASH 버전과 훨씬 더 호환됩니다. 이렇게 하면 현재 스크립트를 다시 작성하는 일이 줄어들지는 않지만 새 스크립트의 문제는 거의 확실하게 제거됩니다.

Mac의 로컬 스크립트는 #!/usr/local/bin/bash셸을 변경하지 않고도 사용할 수도 있습니다.

Homebrew에서 소프트웨어를 컴파일하려면 Xcode를 설치해야 할 수도 있습니다. Xcode를 설치한 후(App Store에서) 아직 수행하지 않은 경우 Xcode의 명령줄 도구를 xcode-select --install.

관련 정보