shell腳本中定義路徑變量出現的BUG


===========================================================================

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

===========================================================================


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM