rsync 在 shell 脚本中给出错误

rsync 在 shell 脚本中给出错误

我有一个将文件复制到另一台服务器的脚本。我不想覆盖任何文件,所以我必须使用 rsync。

当我在命令行运行时,我可以毫无问题地使用 rsync。但是当我在脚本中使用它时,rsync 不起作用。它给出了一个错误,我什至在谷歌上找不到这个错误。

这是错误:

rsync: Failed to exec ssh: Not a directory (20)
rsync error: error in IPC code (code 14) at pipe.c(84) [sender=3.0.9]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in IPC code (code 14) at io.c(605) [sender=3.0.9]

我想指出错误是不是没有这样的文件或目录(2)

错误是:不是目录(20)

这是脚本:

#!/bin/bash
PATH=$1
FILE=$2
DAY=$(/usr/bin/date +'%Y-%m-%d')
/usr/bin/rsync -avh $PATH postgres@REMOTE_IP:/Backup/xlog_backup/$DAY/.

我正在这样使用

sh ~postgres/archive.sh /srv/postgresql/data/pg_xlog/000000010000003E00000025 000000010000003E00000025

这是 ls 输出:

postgres@MY_SERVER:~$ls -l /srv/postgresql/data/pg_xlog/000000010000003E00000025
-rw-------. 1 postgres postgres 16777216 May 25 10:41 /srv/postgresql/data/pg_xlog/000000010000003E00000025

服务器:CentOS Linux 版本 7.2.1511(核心)

rsync:rsync版本3.0.9协议版本30

postgres@MY_SERVER:~$rpm -qa | grep openssh

openssh-clients-6.6.1p1-22.el7.x86_64

openssh-server-6.6.1p1-22.el7.x86_64

openssh-6.6.1p1-22.el7.x86_64

rsync-3.0.9-17.el7.x86_64

你能帮我解决这个问题吗?

答案1

不要$PATH在脚本中用作变量!!!

它会覆盖你的,呃,$PATH

一个例子:

echo $PATH   
/home/maulinglawns/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

如果我将其他内容分配给$PATH,会发生什么?

maulinglawns@debian-HP:~$ PATH=foo
maulinglawns@debian-HP:~$ echo $PATH
foo
maulinglawns@debian-HP:~$ ls
bash: ls: command not found

作为一般建议,我建议在脚本中分配变量时完全避免使用大写字母。最好将它们保留为 shell 的环境变量。

相关内容