我有一個將文件複製到另一台伺服器的腳本。我不想覆蓋任何文件,所以我必須使用 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 的環境變數。