我正在运行一些重复性任务,我认为创建一个小型 bash 脚本以便通过一个命令执行所有这些任务会很好:运行 bash 脚本。这是我需要运行的任务:
# stop HTTPD, clear logs, start HTTPD back
service httpd stop
cd /var/log/httpd/
rm -r *
service httpd start
# clear PHP error logs
truncate /var/log/php/php_errors.log --size 0
# clear MySQL error, query and slow logs
truncate /var/log/mysql/mysql_error.log --size 0
truncate /var/log/mysql/mysql_query.log --size 0
truncate /var/log/mysql/mysql_slow.log --size 0
这就是我正在做的:
#! /bin/bash
# stop HTTPD, clear logs, start HTTPD back
service httpd stop
cd /var/log/httpd/
rm -r *
service httpd start
# clear PHP error logs
truncate /var/log/php/php_errors.log --size 0
# clear MySQL error, query and slow logs
truncate /var/log/mysql/mysql_error.log --size 0
truncate /var/log/mysql/mysql_query.log --size 0
truncate /var/log/mysql/mysql_slow.log --size 0
但我一直收到这个错误,我不知道我做错了什么:
bash: ./cleanup.sh: /bin/bash^M: 错误的解释器: 没有这样的文件或目录
我做错了什么和/或遗漏了什么?
答案1
你需要跑dos2unix
在您的文件中,该文件可能会以 Windows 文件结尾复制到您的 Linux 发行版中。的^M
,又名回车字符,使您的 Linux 发行版认为它需要查找命令bash^M
,而不是bash
.
要实际查看^M
字符,您可以使用以下命令打开文件cat -A
:
$ cat -A file
# --- comment: expected output below ---
#! /bin/bash^M
# stop HTTPD, clear logs, start HTTPD back^M
service httpd stop^M
cd /var/log/httpd/^M
如果您还没有dos2unix
安装,您也可以尝试使用tr
命令替换(如所解释的这里):
tr -d '\r' < inputfile > outputfile