从 cron 作业执行 bash 脚本时出现“/bin/bash^M:错误的解释器:没有这样的文件或目录”错误

问题描述 投票:0回答:4

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
mysql linux bash cron
4个回答
6
投票

尝试 dos2unix 是否可以修复您的文件:

$ dos2unix /home/A/B/Restore_DB.sh

如果该命令不适合您,您可以使用发行版的包管理器安装它。

问题在于换行符编码,Windows/DOS 的换行符编码方式与 Unix 不同。

  • Unix 换行符序列:
    \n
    (仅换行符)
  • Windows 换行序列:
    \r\n
    (2 个字符,回车换行)

参见 https://en.wikipedia.org/wiki/Newline#Representations


4
投票

这看起来像是 unixoid 和 MS-Windows 等系统上不同行结束编码的问题。

使用 unixoid 系统原生的行结尾

\n
,而不是 MS-Windows 风格。该字符包含一个额外的字符,通常会像您在错误消息中看到的那样显示 (
^M
)。

您可以使用十六进制编辑器仔细查看相关行。这使您可以准确查看字符串中使用了哪些不可打印字符。


2
投票

我刚刚在 OS X 上遇到了这个问题,并注意到 dos2unix 可以作为酿造公式使用:

brew install dos2unix

0
投票

yum install dos2unix

就像一个魅力!!!!

© www.soinside.com 2019 - 2024. All rights reserved.