【问题标题】:the same bash script in command line doesn't work when run from a file [duplicate]从文件运行时,命令行中的相同 bash 脚本不起作用[重复]
【发布时间】:2011-05-04 18:09:48
【问题描述】:

我正在尝试从 cygwin 学习 Bash 脚本。当我在命令提示符中手动键入以下行时,一切正常,我看到屏幕上打印了从 1 到 10 的数字。

for i in {1..10}; do
    echo $i;
done

但是,如果我将脚本保存到文件 (test.sh) 并运行“./test.sh”,则会显示以下错误

./test.sh: line 1: syntax error near unexpected token `$'do\r''
'/test.sh: line 1: `for i in {1..10}; do

这对我来说似乎很奇怪。我想知道为什么相同的脚本在命令行中运行良好但不是从文件中运行。

谢谢, 德里克

【问题讨论】:

  • 在 ubuntu 上的 bash 中对我来说很好(在命令行和脚本文件中)。
  • 您使用什么文本编辑器来编辑文件?您的脚本可能是 RTF 或其他非纯文本格式。
  • 我在 Windows 中使用 GVIM。我将尝试使用 :set fileformat=unix 强制使用 unix 编码保存文件。将报告 tmr。
  • 是的,将文本文件更改为 unix 编码有效!

标签: bash cygwin


【解决方案1】:

\r 是一个提示。您的文件可能有 CRLF (\r\n) 行结尾,bash 解释器无法正常处理。更改您的编辑器设置以使用 Unix 样式 (\n) 行尾,或在文件上运行 /usr/bin/dos2unix <file> 以重置行尾。

【讨论】:

    【解决方案2】:

    使用 unix 文本编辑器 vi 的另一种可能的解决方案:

    vi filename.sh命令在vi编辑中打开文件;

    输入 vi :set ff=unix 命令;

    :wq保存文件

    它将以 unix 行结尾保存文件。

    【讨论】:

      【解决方案3】:

      我在 Notepad++ 中遇到了同样的错误。从这篇文章中,我更改了编辑 --> EOF 转换,选择了 Unix/OSX 格式,修复了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 2012-04-10
        • 2019-02-08
        • 2016-10-20
        • 2021-11-01
        • 1970-01-01
        • 2016-12-13
        相关资源
        最近更新 更多