exec cp 从脚本中失败,但直接发出时有效

exec cp 从脚本中失败,但直接发出时有效

我有一个将 SQL 备份复制到 Windows 服务器的脚本。这是 /etc/fstab 中的行:

//my.win.box/share$ /winshare   cifs    credentials=/etc/credfile,dom=mydomain,uid=0,gid=0,file_mode=0600,dir_mode=0700 0 0

这是备份脚本:

备份.sh:

# copy zipped sql exports to /winshare/db
find /backups/sql/*sql.gz -mtime +1 -exec cp {} /winshare/db \;

使用 root 权限登录(在本例中为 root)

$ ./backup.sh
cp: cannot create regular file `/winshare/db/mydb_20130301.sql.gz': Permission denied

然而,如果我从提示符发出命令,而不是通过脚本:

$ find /backups/sql/*sql.gz -mtime +1 -exec cp {} /winshare/db \;

文件按预期复制。再次以 root 身份登录。

什么可能导致脚本内命令失败,但相同的命令可以从控制台运行?

答案1

你没有说这是什么类型的机器,但我的第一个观察是你的 backup.sh 中没有解释器行来指定应该运行它的程序。你想要这样的东西:

#!/bin/bash
export PATH=/bin:/usr/bin

find....your stuff..here

现在,仅此并不能解决您的权限问题,但会有所帮助。您的 shell 可能正在获取一个系统范围的 .rc 文件,该文件指定了不同的 find 命令,或者谁知道它做了什么。通过指定解释器,您可以查看该解释器的初始化文件。另外,您的登录环境可能有脚本没有的环境。

相关内容