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 shell 进行编写。如果您只想拥有彼此更兼容的 BASH 版本......

安装自制在 Mac 上使用Terminal.appiTerm2.app。并使用 Homebrew 安装 BASH ( brew install bash)。然后在 Mac 上更改您的 shell:chsh -s /usr/local/bin/bash。登出。登录。今天,您将获得 macOS/OS X 上的 BASH 4.4,它与您拥有的其他 BASH 版本的兼容性要好得多。这不会节省对当前脚本的一些重写,但几乎肯定会消除新脚本的问题。

Mac 本地的脚本也可以#!/usr/local/bin/bash在不更改 shell 的情况下使用。

您可能还需要安装 Xcode 才能从 Homebrew 编译软件。如果您在安装 Xcode(从 App Store)后尚未完成此操作,请安装 Xcode 的命令行工具xcode-select --install

相关内容