7z 无法从 putty 下的 shell 脚本运行

7z not working from shell script under putty

我想使用 7z 命令定期备份文件。

下面是testscript.sh:

#!/bin/bash
SRCDIR="/var/www/html/folder2beBackedup/"
DESTDIR="/var/www/html/backups/"
FILENAME=bk_test-$(date +%Y%m%d%H%M%S).7z
7za a $DESTDIR$FILENAME $SRCDIR

我运行 putty 中的脚本是这样的:

/bin/bash /var/www/html/testscript.sh

但是puttyreturns这个错误:"Cannot find 1 file"。参见

如果我通过 putty 直接 运行 7z 命令那么它可以工作,但是相同的命令不能工作testcript.sh.

我怀疑您的 SRCDIR 变量存在 copy/paste 错误,因为 WARNING: No more files 输出表明它正在尝试扫描没有名称的目录。简单地指定错误的变量名(因此没有目录)会导致它包含当前目录中的文件,所以它可能更危险,比如脚本中某处的无效字符。您是否尝试过使用 hexdump -C 查看脚本以确保任何地方都没有奇怪的杂散字符?

如果我使用名为 "/tmp/src/"^M 的源目录,其中 ^M 实际上是回车 return 字符(插入 vim 和 ^V ^M),我得到的结果与您的屏幕截图所示相同。

以下是 the bash tag wiki 的摘录:

  1. 检查你的脚本或数据是否有DOS风格的行尾字符

    • 使用 cat -v yourfileecho "$yourvariable" | cat -v

      DOS 回车 returns 将在每行后显示为 ^M

      如果找到它们,请使用 dos2unix(a.k.a。fromdos)或 tr -d '\r'

    • 删除它们