scutil
CSVファイルの値に基づいてコンピューターの名前を変更するために使用するスクリプト(ほとんどが借用)があります。これは、コンピュータ名にシリアル番号と一致する変数を設定し、名前の変更ComputerName
、HostName
およびLocalHostName
変数で。参考のために、名前はSFO-C2900-MBP
スクリプトは次のとおりです。
#!/bin/bash
echo "-----Starting-----"
# Get serial from ioreg and assign
serial="$(ioreg -l | grep IOPlatformSerialNumber | sed -e 's/.*\"\(.*\)\"/\1/')"
#Initialize compName to null
compName=''
#Loop through CSV looking for a match
while IFS=',' read ser loc; do
if [ "$serial" == "$ser" ]; then
compName=$loc
echo "Serial Matched with name: $compName"
fi
done < /Volumes/Macintosh\ HD/Users/Shared/Configuration/names.csv
#If compName is not null, use scutil to rename. Otherwise user must manually rename
if [[ -z $compName ]]; then
echo "This computer was not found on the list, you must manually rename it."
else
echo "Setting Host Name to $compName"
scutil --set HostName $compName
echo "Setting Computer Name to $compName"
scutil --set ComputerName $compName
echo "Setting Local Host Name to $compName"
scutil --set LocalHostName $compName
fi
echo "-----Finished Renaming-----"
これから次の2つのことが起こります。
1)スクリプトが次の名前を変更しようとすると、エラーがスローされますLocalHostName
。SCPreferencesSetLocalHostName() failed: Invalid argument
:2)端子は、後に終了/再起動時に/ etc、次の操作を行います ターミナルでも、ホスト名が欠落して、フォルダの上に疑問符を示すが
scutil --set {def}
正常に動作するターミナルを使用してこれらの値を手動で設定し、ターミナルを通常の動作に戻します。
私は次を試しました:
- LocalHostName行をスクリプトから削除する
- LocalHostName値を、CSVファイルではなく、スクリプト内で設定された変数に設定する
ほとんどの場合、スクリプトの問題は何よりもターミナルに対して行うことです-LocalHostNameの問題を回避できます。奇妙なことに、scutil --get {def}
それらで実行すると、ターミナルは正しい値を出力します。
scutil --set LocalHostName
回線上の同じ問題。ターミナルでの名前の消失scutil --set HostName
は、スクリプトではなくターミナルを介して手動で実行することで修正されることも付け加えておきます。
sudo <name of the script>
正しく呼び出していますか?
echo $compName | od -c
「CSVをループする」セクションの後にスクリプトに行を追加してみてください。(何od
を試すか、例えばecho foo | od -c
ターミナルで試してみてください...)
$compName
変数がオプションとして解釈される可能性のない変数を引用することを検討しましたか?試してください:scutil --set LocalHostName "$compName"