Bash

為什麼 mv 在 Mac OS 恢復模式期間在 bash 3.2 中的這個(bash)shell 腳本中失敗?

  • September 26, 2019

我正在嘗試在恢復模式期間在 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# 

您的變數被引用,您不需要轉義空格:

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

(ETC。)

也(切線)相關:

引用自:https://unix.stackexchange.com/questions/543913