===========================================================================
if 語句中的定義路徑變量 引發命令的PATH路徑改變出現的bug 問題
- 原腳本文件:inotify +rsync 實時共享
#!/bin/bash
PATH=/data/
IP=172.16.1.41
cd $PATH &&\ 切換到一個新的變量中了
/usr/bin/inotifywait -mrq --format '%w%f' -e create,moved_to,close_write,delete $PATH|while read line
do
if [ -f $line ];then此時的rsync命令就已經不能使用了 (解決方法 絕對路徑)/usr/bin/rsync
rsync -az $line --delete rsync_backup@$IP::nfsbackup --password-file=/etc/rsync.password
else
cd $PATH &&\
rsync -az ./ --delete rsync_backup@$IP::nfsbackup --password-file=/etc/rsync.piassword
fi
done
===========================================================================
- sh -x 的驗證過程
[root@nfs01 scripts]# vim jiankong2.sh
#cd $PATH &&\
do
if [ -f $line ];then
echo 01 在此特別增加了顯示內容方便定位到當前變量路徑
echo $PATH
echo 03
rsync -az $line --delete rsync_backup@$IP::nfsbackup --
password-file=/etc/rsync.password
else
echo 01
echo $PATH
sh -x 查看過程
[root@nfs01 scripts]# sh -x jiankong2.sh
+ PATH=/data/
+ IP=172.16.1.41
+ read line
+ /usr/bin/inotifywait -mrq --format %w%f -e create,moved_to
+ '[' -f /data/oldgirl ']'
+ echo 01
01
+ echo /data/ PATH變量的路徑轉換為/data/ 所以命令會在此讀取路徑
/data/
+ echo 03
03
+ rsync -az /data/oldgirl --delete rsync_backup@172.16.1.41:
jiankong2.sh: line 13: rsync: command not found 結論:果真報錯 命令找不到
+ read line
+ '[' -f /data/oldgirl ']'
+ echo 01
01
+ echo /data/
/data/
+ echo 03
03
+ rsync -az /data/oldgirl --delete rsync_backup@172.16.1.41:
jiankong2.sh: line 13: rsync: command not found 同樣的命令找不到
+ read line
===========================================================================
- 解決方法一 定義變量要和PATH區分開 刪除cd 到的變量路徑
[root@nfs01 scripts]# cat jiankong2.sh
#!/bin/bash
WEIZHI=/data/
IP=172.16.1.41
#cd $PATH &&\
/usr/bin/inotifywait -mrq --format '%w%f' -e create,moved_to,close_write,delete $WEIZHI|while read line
do
if [ -f $line ];then
rsync -az $line --delete rsync_backup@$IP::nfsbackup --password-file=/etc/rsync.password
else
#cd $PATH &&\
rsync -az $WEIZHI --delete rsync_backup@$IP::nfsbackup --password-file=/etc/rsync.password
fi
done
===========================================================================
- 解決方法二
使用絕對路徑可以跳出當前定義PATH環境
/usr/bin/rsync
===========================================================================