복구 모드 중에 Mac에서 bash 스크립트를 사용하여 일부 파일을 이동하려고 합니다. 복구를 시작한 후 터미널에 수동으로 명령을 입력하여 파일을 성공적으로 이동할 수 있었습니다. 그러나 한 가지 목표는 프로세스를 문서화하고 이식 가능하게 만드는 것이므로 스크립트가 필요합니다. mv
스크립트에서 명령을 실행 하려고 하면 오류가 발생합니다 No such file or directory
. 파일 경로를 수동으로 입력하면 명령이 올바르게 실행되는 것을 확인했지만 스크립트에서 여전히 오류가 발생합니다.
"
변수 평가를 위해 큰따옴표( )와 달러 기호( $
), 달러 기호( $
)와 중괄호( {}
) 및 기타 몇 가지 조합을 사용해 보았습니다 . 모두 같은 오류로 인해 실패합니다. 또한 src에 후행 슬래시, *
src에 와일드카드( ), src와 dest에 후행 슬래시를 사용해 보았습니다 . 나는 완전히 당황했다. 이는 MacOS 복구 모드에만 해당될 수 있지만 프롬프트에서 이를 알리므로 -bash-3.2
확실히 bash 3.2 셸인가요?
도와주세요. 고위 개발자들조차도 이 문제로 인해 어려움을 겪고 있습니다.
잘못된 구문 분석과 관련이 있을 수 있습니까? /*
목적지 끝에 하나가 있다는 것을 알았지 만 지정하지 않았습니다 ...
스크립트는 다음과 같습니다
#! /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/'
(등.)
또한 (접선적으로) 관련: