• 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

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

  • 相关阅读:
    JSON--List集合转换成JSON对象
    某些项目因位于工作空间目录中而被隐藏
    Target runtime Apache Tomcat v6.0 is not defined.错误解决方法
    SQLSERVER2008 18456错误
    android捕获ListView中每个item点击事件
    Android中Toast的用法简介
    android ListView详解
    Android调试工具及方法
    免费卫星图像下载网站
    ArcScene三维制作
  • 原文地址:https://www.cnblogs.com/wang-xd/p/6561964.html
Copyright © 2020-2023  润新知