当前位置: 首页 > 面试题库 >

意外令牌'-bash附近的语法错误

尉迟龙光
2023-03-14
问题内容

我在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只)。

在Linux机器上,您可以通过运行以下命令从文件中删除回车符(如果存在)来测试此理论:

cat originalfile | tr -d "\r" > newfile

然后尝试运行新文件sh ./newfile。如果可行,则问题是回车以隐藏字符的形式出现。

注意: 这不是您环境的精确复制(我无法使用Mac),但是在我看来,问题似乎是某个地方保存了回车符的编辑器返回了文件。

-/编辑

为了详细说明,操作系统和编辑器可以具有不同的文件编码默认值。通常,应用程序和编辑器将影响所使用的文件类型编码,例如,我认为MicrosoftNotepad和Notepad++默认为Windows-1252。也可能需要考虑换行符的差异(在Windows环境中,回车符和换行符通常用于终止文件中的行,而在Linux和OSX中,通常仅使用换行符)。



 类似资料:
  • 问题内容: 问题答案: 您要在UNIX命令提示符下键入此命令吗?您应该在python环境中执行此操作,即。在提示符下键入,然后从那里开始。 另外,在Python行的末尾不需要

  • 我正在使用一种新的语言,我想它是linux,但老实说,我不知道;我们通过一个名为putty的程序连接到某个服务器来进行编程。作为作业的一部分,我必须创建一个计算器程序,以两个数字和一个运算符作为分段,但我得到了一堆意想不到的令牌错误。我很迷茫,我的课文和我的教授都没有帮助 到目前为止,我只是想得到它,这样我就可以从命令中得到2/calc.sh 1 1但我在第20行中不断遇到意外的标记错误

  • 问题内容: 我键入的代码与《 Linux命令行:完整介绍》 (第369页)相同,但提示错误: 代码是这样的: 我想了解是什么导致了错误?如何修改代码?我的系统是Ubuntu。 问题答案: 和之间必须有一个空格,如下所示: 这些(及其组合)也都是 不正确的 : 另一方面,这些都可以: 顺便说一句,这些是等效的: 这些也等效: 而且,您的脚本的中间部分应该像这样更好: (我也将引号中的引号删除了,因为

  • 对问题可能是什么的任何想法? 我的代码是: 将其保存为.sh并运行bash file.sh CentOS 6 32位 问题是什么?第一次使用BASH时,需要它来进行简单的无限循环。

  • 问题内容: 我正在尝试与Jenkins构建过程一起运行以下Shell命令 现在构建失败 但是奇怪的是,当直接在Jenkin从站上运行此命令时,它可以正常工作。 如您所见,Jenkins也运行shell命令 。 任何帮助将不胜感激,因为我努力了几个小时 问题答案: 是由启用的扩展模式。目前尚不清楚如何在您的Jenkins从站中启用它,但是将命令添加到脚本中应该可以解决您的问题。

  • 在My Gulpfile.js错误部分: 我的包裹。json: 我运行并得到以下错误。 在终端屏幕中: gulp.task('webpack',gulp.series(async()=