这里是“linux执行sh脚本报错:$’\r’: 未找到命令的完美解决方法”的完整攻略。
问题描述
当我们在 Linux 系统执行一个 sh 脚本时,可能会遇到如下错误:
bash: ./test.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录
或者出现如下错误:
-bash: ./test.sh: /bin/bash: ^M: bad interpreter: No such file or directory
这是因为在 Windows 系统中编辑的文件,其行结尾符是"\r\n",而在 Linux 系统中行结尾符是"\n",因此在 Linux 系统执行这个脚本时会出现 $'\r': 未找到命令 的错误。
解决方法
方法一:使用 vi 编辑器进行修改
使用vi编辑器,将脚本文件的行尾符从“\r\n”改为“\n”。
vi test.sh
进入vi后按下“ESC”键,输入如下命令:
:set fileformat=unix
保存并退出:
:wq
方法二:使用dos2unix命令转换文件格式
dos2unix是一个转换文本文件格式的命令,可以将 Windows 格式的文本文件转换为 Unix 格式的文本文件格式。
安装命令:
sudo apt-get install dos2unix
使用命令进行转换:
dos2unix test.sh
示例说明
假设有一个 sh 脚本文件 test.sh,在 Windows 系统中编辑的,执行此脚本时出现了:$'\r': 未找到命令 的错误。
示例一:使用 vi 编辑器进行修改
- 使用命令将 test.sh 文件复制到 Linux 系统中:
scp test.sh user@remote:/path/to/dir
- 进入 Linux 系统,使用 vi 编辑器修改 test.sh 文件:
vi test.sh
- 输入如下命令,用于将脚本文件的行尾符从“\r\n”改为“\n”:
:set fileformat=unix
- 保存并退出 vi 编辑器:
:wq
- 执行修改后的 test.sh 文件即可。
示例二:使用dos2unix命令转换文件格式
- 使用命令将 test.sh 文件复制到 Linux 系统中:
scp test.sh user@remote:/path/to/dir
- 进入 Linux 系统,安装 dos2unix 命令:
sudo apt-get install dos2unix
- 使用 dos2unix 命令转换 test.sh 文件的格式:
dos2unix test.sh
- 执行转换后的 test.sh 文件即可。
总结
使用 vi 或 dos2unix 命令进行转换,可以避免执行 sh 脚本时出现 $'\r': 未找到命令 的错误。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:linux执行sh脚本报错:$’\r’: 未找到命令的完美解决方法 - Python技术站