为什么 bash 从档案中提取文件后会执行它们?

为什么 bash 从档案中提取文件后会执行它们?

我有以下 bash 脚本:

#!/bin/bash
set -e
cd /var/www/html/mydir
tar cvf backup.tar file1.php file2.php ...
mysqldump -u$1 -p$2 $3 mytable > sqlbackup.sql
tar xvf mypatch.tar
mysql -u$1 -p$2 $3 < mysqlpatchfromthetarpatch.sql
echo 'Success.'

愤怒的编辑: 我不明白为什么要投反对票。万一那家伙不能从头到尾读完一篇文章,我只想提取一些文件,而不是运行它们。以下是错误:

[root@webserver]# ./myscript.sh user "password" dbname
file1.php
: No such file or directorycle.php: line 1: ?php
include/DatabaseObject/Article.php: line 2: class: command not found

file1.php 名​​为 include/Controllers/AdminController.php,下一个文件名为 include/DatabaseObject/Article.php,我假设这就是我得到的原因

: 没有这样的文件或目录cle.php:第 1 行:?php

提取文件后,程序因 file1.php 内部错误而中断。我该怎么办?

答案1

我怀疑您没有给我们完整的脚本,并且您隐去了导致问题的关键和详细信息。在脚本顶部放置一个。这基本上会回显正在运行的每个命令。如果您仍然无法通过此详细输出找出原因,请发布报告错误之前发出的set -x确切命令。set -x

答案2

您的某个文件名中是否有控制字符,例如 & 或 ;?

相关内容