【问题标题】:rsync in shell for loop [duplicate]rsync在shell for循环中[重复]
【发布时间】:2012-10-22 07:44:44
【问题描述】:

我有这个 shell 脚本

#!/bin/sh
PATHS=( a b c d )

for PATH in ${PATHS[@]}
do
  rsync -avziP /home/user/$PATH $SERVER:$server_folder -b --backup-dir=$backup_folder/backup_$date --delete --exclude=.* --log-file=$HOME/rsync.log
done

我总是得到这个错误:

rsync:找不到命令

让我抓狂的是,如果我删除 for 循环,只运行 rsync 命令,脚本就可以完美运行

【问题讨论】:

  • 顺便说一下,您使用的是数组 (${PATHS[@]}),这是 bash 独有的功能。你最好在你的shebang中指定#!/bin/bash之类的东西,否则它可能迟早会爆炸——大多数Linux发行版倾向于删除bash作为默认的sh实现,BSD/Macs从来没有把bash作为sh。
  • 最佳实践是使用小写的变量名 (path) 来表示既不是环境变量也不是内置变量;这样可以避免误踩保留名称(如PATH)。

标签: shell for-loop sh rsync


【解决方案1】:

PATH 是保留变量!

它是指定在哪里搜索工具的变量(如rsync

$ set | grep ^PATH=
PATH=/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

使用另一个变量名!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2020-10-18
    • 1970-01-01
    • 2016-06-05
    • 2019-02-01
    • 2020-02-07
    • 2022-05-17
    相关资源
    最近更新 更多