从 cron 作业执行 bash 脚本时出现“/bin/bash^M: 错误的解释器:没有这样的文件或目录”错误
"/bin/bash^M: bad interpreter: No such file or directory" error when executing a bash script from a cron job
Restore_DB.sh :-
#!/bin/bash
mysql -u user -ppassword DB_name < /home/A/B/SQL_File.sql
我使用上面的代码从 cron 作业恢复了 MySQL 数据库,但我收到了下面的错误
/usr/local/cpanel/bin/jailshell: /home/A/B/Restore_DB.sh: /bin/bash^M: bad interpreter: No such file or directory
这是我使用的 cron 作业命令:-
/home/A/B/Restore_DB.sh
他看起来像是 unixoid 和 MS-Windows 之类系统上不同行尾编码的问题。
使用 unixoid 系统固有的以 \n
结尾的行,而不是 MS-Windows 样式。那一个包含一个额外的字符,通常显示为您在错误消息中看到的内容 (^M
)。
您可以使用十六进制编辑器仔细查看有问题的行。这使您可以准确地查看字符串中使用了哪些不可打印的字符。
尝试 dos2unix 是否可以修复您的文件:
$ dos2unix /home/A/B/Restore_DB.sh
如果 dos2unix 还不存在,您可以使用您的发行版的包管理器安装它。
问题是换行编码,Windows/DOS 换行编码与 Unix 不同。
- Unix 换行序列:
\n
(仅换行符)
- Windows换行序列:
\r\n
(2个字符,回车return和换行)
yum install dos2unix
很有魅力!!!!
我只是 运行 在 OS X 上加入了这个并且注意到 dos2unix 可以作为 brew 公式使用:
brew install dos2unix
Restore_DB.sh :-
#!/bin/bash
mysql -u user -ppassword DB_name < /home/A/B/SQL_File.sql
我使用上面的代码从 cron 作业恢复了 MySQL 数据库,但我收到了下面的错误
/usr/local/cpanel/bin/jailshell: /home/A/B/Restore_DB.sh: /bin/bash^M: bad interpreter: No such file or directory
这是我使用的 cron 作业命令:-
/home/A/B/Restore_DB.sh
他看起来像是 unixoid 和 MS-Windows 之类系统上不同行尾编码的问题。
使用 unixoid 系统固有的以 \n
结尾的行,而不是 MS-Windows 样式。那一个包含一个额外的字符,通常显示为您在错误消息中看到的内容 (^M
)。
您可以使用十六进制编辑器仔细查看有问题的行。这使您可以准确地查看字符串中使用了哪些不可打印的字符。
尝试 dos2unix 是否可以修复您的文件:
$ dos2unix /home/A/B/Restore_DB.sh
如果 dos2unix 还不存在,您可以使用您的发行版的包管理器安装它。
问题是换行编码,Windows/DOS 换行编码与 Unix 不同。
- Unix 换行序列:
\n
(仅换行符) - Windows换行序列:
\r\n
(2个字符,回车return和换行)
yum install dos2unix
很有魅力!!!!
我只是 运行 在 OS X 上加入了这个并且注意到 dos2unix 可以作为 brew 公式使用:
brew install dos2unix