gpt4 book ai didi

linux - 意外标记附近的语法错误' - bash

转载 作者:IT王子 更新时间:2023-10-29 00:28:14 26 4
gpt4 key购买 nike

我在我的 Mac 上写了一个示例脚本

#!/bin/bash
test() {
echo "Example"
}
test
exit 0

这通过显示示例工作得很好

当我在 RedHat 机器上运行这个脚本时,它说

syntax error near unexpected token '

我检查了 bash 是否可用

cat /etc/shells

which bash shows /bin/bash

有人遇到同样的问题吗?

提前致谢!

最佳答案

可能是文件编码问题。

在不同操作系统和编辑器之间处理文件时,我遇到了文件类型编码问题 - 就我而言,尤其是在 Linux 和 Windows 系统之间。

我建议检查您的文件编码以确保它适合目标 linux 环境。与使用 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),但在我看来,问题可能是某处的编辑器已保存回车到文件中。

---/编辑

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

引用文件编码的类似问题和答案在这里:bad character showing up in bash script execution

关于linux - 意外标记附近的语法错误' - bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20895946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com