我有一个可以在我的计算机上运行的测试 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.app
或iTerm2.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
。