我在Mac上写了一个示例脚本
#!/bin/bash test() { echo "Example" } test exit 0
通过显示Example可以正常工作
当我在RedHat机器上运行此脚本时,它说
意外令牌附近的语法错误’
我检查了bash是否可用
cat /etc/shells which bash shows /bin/bash
有人遇到过同样的问题吗?
提前致谢 !
这可能是文件编码问题。
在不同操作系统和编辑器之间处理文件时遇到了文件类型编码问题,在我的情况下,尤其是在Linux和Windows系统之间。
我建议检查文件的编码,以确保它适合目标linux环境。与使用Windows文本编辑器相比,与使用Windows文本编辑器相比,使用MAC编码的可能性较小,但是我认为文件编码仍然值得考虑。
-–编辑(按照@Potatoswatter的建议添加实际的解决方案)
为了演示文件类型编码可能是这个问题的方法,我将示例脚本复制/粘贴到Windows的记事本中(我无法访问Mac),然后将其复制到Linux机器并运行:
jdt@cookielin01:~/windows> sh ./originalfile ./originalfile: line 2: syntax error near unexpected token `$'{\r'' '/originalfile: line 2: `test() {
在这种情况下,记事本使用回车符和换行符保存了文件,从而导致上面显示的错误。该\r表示回车(Linux系统终止换行符行\n只)。
\r
\n
在Linux机器上,您可以通过运行以下命令从文件中删除回车符(如果存在)来测试此理论:
cat originalfile | tr -d "\r" > newfile
然后尝试运行新文件sh ./newfile。如果可行,则问题是回车以隐藏字符的形式出现。
sh ./newfile
注意: 这不是您环境的精确复制(我无法使用Mac),但是在我看来,问题似乎是某个地方保存了回车符的编辑器返回了文件。
-/编辑
为了详细说明,操作系统和编辑器可以具有不同的文件编码默认值。通常,应用程序和编辑器将影响所使用的文件类型编码,例如,我认为MicrosoftNotepad和Notepad++默认为Windows-1252。也可能需要考虑换行符的差异(在Windows环境中,回车符和换行符通常用于终止文件中的行,而在Linux和OSX中,通常仅使用换行符)。