为什么在 Mac OS 恢复模式期间,mv 在 bash 3.2 中的此 (bash) shell 脚本中失败?

为什么在 Mac OS 恢复模式期间,mv 在 bash 3.2 中的此 (bash) shell 脚本中失败?

我正在尝试在恢复模式期间在 Mac 上使用 bash 脚本移动一些文件。启动恢复后,我可以通过在终端中手动输入命令来成功移动文件。然而,一个目标是记录该过程并使其可移植,因此需要一个脚本。当我尝试mv从脚本运行命令时,出现错误No such file or directory。我已确认当我手动输入文件路径时该命令可以正确执行,但脚本仍然出错。

我尝试过使用双引号 ( ") 和美元符号 ( $)、美元符号 ( $) 和大括号 ( {}) 以及其他一些组合来进行变量评估。它们都因相同的错误而失败。我还尝试过在 src 上使用尾随斜杠、*在 src 上使用通配符 ( ) 以及在 src 和 dest 上使用尾随斜杠。我完全被难住了。这可能是 MacOS 恢复模式特有的,但既然提示符宣布-bash-3.2,这肯定是 bash 3.2 shell 吗?

请帮忙 - 即使我们的高级开发人员也被这个问题难住了......
它可能与不正确的解析有关吗?我注意到/*目的地的末尾有一个,但我没有指定......

脚本是:

#! /bin/bash
#_# Setup
echo 'Setting up variables'
SYSDIR='/Volumes/Macintosh\ HD/System'
EXTDIR='Library/Extensions'
USERDIR='/Volumes/Macintosh\ HD/Users/admin'

#_# Bluetooth
echo 'Mitigating Bluetooth'
BLUE='IOBluetoothFamily.kext'
mkdir -p "$USERDIR/delete_me/$BLUE"
mv "$SYSDIR/$EXTDIR/$BLUE"/* "$USERDIR/delete_me/$BLUE"

echo '*Verify:* System Preferences/Bluetooth should display an error indicating bluetooth is not available.'

输出是:

-bash-3.2# ./bluetooth.sh 
Setting up variables
Mitigating Bluetooth
mv: rename /Volumes/Macintosh\ HD/System/Library/Extensions/IOBluetoothFamily.kext/* to /Volumes/Macintosh\ HD/Users/admin/delete_me/IOBluetoothFamily.kext/*: No such file or directory
*Verify:* System Preferences/Bluetooth should display an error indicating bluetooth is not available.
-bash-3.2# 

答案1

您的变量被引用,您不需要转义空格:

SYSDIR='/Volumes/Macintosh HD/System/'

(ETC。)

另外(切线)相关:

相关内容