You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS运行Linux迁移的Bash备份脚本多类报错问题咨询

问题成因分析

原脚本declare -A报错原因

macOS自带的Bash版本为3.2.x,而declare -A声明的关联数组是Bash 4.0才新增的特性。Linux发行版默认搭载的Bash基本都是4.0以上版本,所以可以正常运行;macOS自带的低版本Bash不支持该语法,就会报参数无效的错误,后续的TARGET变量解析异常也是关联数组声明失败导致的连锁错误。

修改后脚本目录报错原因

你修改后的脚本在调用backup函数时,把多个源路径拆成了多行书写,但没有添加行尾续行符\,Bash会把每一行开头没有缩进、也没有续行符的路径当成独立命令执行,系统找不到路径对应的可执行文件,就会报「Is a directory」的错误。

解决方案

方案1:升级macOS的Bash版本(兼容原脚本写法)

通过Homebrew安装新版Bash即可兼容原关联数组语法:

  1. 安装Homebrew后执行brew install bash
  2. 将脚本开头的shebang修改为#!/usr/local/bin/bash(M系列芯片Mac路径为#!/opt/homebrew/bin/bash),调用新版Bash执行脚本即可。

方案2:修改脚本适配低版本Bash(无需升级软件)

修正续行符和路径错误即可,修改后的代码如下:

#!/bin/bash

backup() {
  local dest_dir="$1"
  shift
  local srcs=("$@")
  mkdir -p "$dest_dir"
  rsync -avuz --delete --delete-after --progress "${srcs[@]}" "$dest_dir"
}

# 每行末尾加续行符\,最后一行源路径不需要加
backup /Users/myuser \
/Volumes/CORSAIR/articoli /Volumes/CORSAIR/bibliografie \
/Volumes/CORSAIR/cataloghi /Volumes/CORSAIR/cd /Volumes/CORSAIR/condominio \
/Volumes/CORSAIR/copertine /Volumes/CORSAIR/cratilo /Volumes/CORSAIR/Documenti \
/Volumes/CORSAIR/esperienza /Volumes/CORSAIR/ezine /Volumes/CORSAIR/fichte \
/Volumes/CORSAIR/filosofi /Volumes/CORSAIR/fonts /Volumes/CORSAIR/francy \
/Volumes/CORSAIR/guide_debian /Volumes/CORSAIR/guide_latex \
/Volumes/CORSAIR/guide_linux /Volumes/CORSAIR/guide_php \
/Volumes/CORSAIR/guide_slackware /Volumes/CORSAIR/html4dummies \
/Volumes/CORSAIR/Immagini /Volumes/CORSAIR/mail /Volumes/CORSAIR/mamma \
/Volumes/CORSAIR/manuale /Volumes/CORSAIR/materiali /Volumes/CORSAIR/mutt4dummies \
/Volumes/CORSAIR/noneuclidee  /Volumes/CORSAIR/pearson /Volumes/CORSAIR/privacy \
/Volumes/CORSAIR/protagonisti /Volumes/CORSAIR/protagonisti_nuovo \
/Volumes/CORSAIR/public_html /Volumes/CORSAIR/retorica /Volumes/CORSAIR/sabina \
/Volumes/CORSAIR/sacchettino /Volumes/CORSAIR/Scaricati /Volumes/CORSAIR/slack4dummies \
/Volumes/CORSAIR/slackbook /Volumes/CORSAIR/slackproject /Volumes/CORSAIR/software_linux \
/Volumes/CORSAIR/software_mac /Volumes/CORSAIR/storia /Volumes/CORSAIR/system_files \
/Volumes/CORSAIR/tesi1 /Volumes/CORSAIR/tesi2 /Volumes/CORSAIR/tesi3 \
/Volumes/CORSAIR/tin4dummies /Volumes/CORSAIR/tipografia /Volumes/CORSAIR/tractatus \
/Volumes/CORSAIR/varia /Volumes/CORSAIR/venetaverifiche /Volumes/CORSAIR/xindy

# 补全目标路径开头的/,同时添加续行符
backup /Users/myuser/Documents \
/Volumes/CORSAIR/argomentare /Volumes/CORSAIR/corriere \
/Volumes/CORSAIR/dialettica /Volumes/CORSAIR/dizionario /Volumes/CORSAIR/ermeneutica \
/Volumes/CORSAIR/fichte /Volumes/CORSAIR/neopositivisti /Volumes/CORSAIR/novecento \
/Volumes/CORSAIR/schelling /Volumes/CORSAIR/scuola

修正的内容还包括你之前第二个backup调用漏写的目标路径开头的/,避免文件同步到错误的相对路径下。

内容的提问来源于stack exchange,提问作者user41063

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:18:01