【Linux 下的 bash 无法正常解析, Windows 的 CRLF 换行符问题导致的】

文章目录

      • 报错原因:
      • 解决办法:
        • 方法一:用 `dos2unix` 修复
        • 方法二:手动转换换行符
        • 方法三:VSCode 或其他编辑器手动改
      • 总结

这个错误很常见,原因是你的 wait_for_gpu.sh 脚本 文件格式不对,具体来说是 Windows 的 CRLF 换行符问题 导致的,Linux 下的 bash 无法正常解析。

hadoop@hadoop:~/anaconda3$ bash wait_for_gpu.sh
: invalid option line 2: set: -
set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
wait_for_gpu.sh: line 3: $'\r': command not found
wait_for_gpu.sh: line 7: $'\r': command not found
wait_for_gpu.sh: line 9: syntax error near unexpected token $'{\r''
'ait_for_gpu.sh: line 9: wait_for_gpu() 

报错原因:

  • set: - 报错,提示 set 命令非法,通常是因为文件开头有 BOMWindows 换行符 \r\n
  • $'\r': command not found,意思是文件里包含 \r,Linux 无法识别。
  • syntax error near unexpected token \r 也是因为多了 \r 字符。

解决办法:

方法一:用 dos2unix 修复

直接运行:

dos2unix wait_for_gpu.sh

然后重新执行:

bash wait_for_gpu.sh

方法二:手动转换换行符

如果 dos2unix 没有装,可以手动替换:

sed -i 's/\r$//' wait_for_gpu.sh

这会去掉每一行末尾的 \r 字符。


方法三:VSCode 或其他编辑器手动改
  1. 用 VSCode 打开 wait_for_gpu.sh
  2. 右下角看行尾,通常会显示 CRLF
  3. 点击它,改为 LF
  4. 重新保存文件。
  5. 重新运行 bash wait_for_gpu.sh

总结

原因: Windows 和 Linux 换行符不同,脚本是 Windows 风格,Linux 执行会报错。

推荐解决方法:

dos2unix wait_for_gpu.sh

即可完美解决!

你可能感兴趣的:(linux,bash,windows)