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

関連情報