shell for 循环中的 rsync [重复]

问题描述 投票:0回答:1

我有这个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 命令,脚本就可以完美运行

shell for-loop sh rsync
1个回答
5
投票

PATH
是保留变量!

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

rsync

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

使用另一个变量名!

避免脚本变量名称大写:

allPaths=( a b c d )
for onePath in "${allPaths[@]}"; do
    rsync -avziP "/home/user/$PATH" "$SERVER:$server_folder" -b \
        --backup-dir="$backup_folder/backup_$date" --delete --exclude=".*" \
        --log-file="$HOME/rsync.log"
done

并保持在用作参数时将变量用双引号引起来的习惯!

© www.soinside.com 2019 - 2024. All rights reserved.