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 的環境變數。

相關內容