回復モード中に、Macでbashスクリプトを使用していくつかのファイルを移動しようとしています。回復を開始した後、端末に手動でコマンドを入力してファイルを正常に移動できました。しかし、一つの目的は、プロセスを文書化し、移植可能にすることであるため、スクリプトが必要です。mv
スクリプトからコマンドを実行しようとするとエラーが発生しますNo such file or directory
。ファイルパスを手動で入力すると、コマンドが正しく実行されたことが確認されましたが、スクリプトでエラーが発生します。
"
変数を評価するために、二重引用符()とドル記号($
)、ドル記号($
)と中括弧({}
)、および他のいくつかの組み合わせを試しました。すべて同じエラーが原因で失敗します。また、srcに末尾のスラッシュ、*
srcにワイルドカード()、srcとdestに後続スラッシュを使用してみました。私は完全に戸惑いました。これはMacOSの回復モードにのみ当てはまりますが、プロンプトでこれを知らせるので、-bash-3.2
確かにbash 3.2シェルですか?
助けてください。先輩の開発者でさえ、この問題に苦しんでいます。
間違った解析に関連している可能性がありますか?/*
目的地の最後に1つあることがわかりましたが、指定していません...
スクリプトは次のとおりです。
#! /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/'
(等)
また(接線的に)関連: