@@ -396,23 +396,27 @@ generateAddress() {
396396
397397generateSerial () {
398398
399+ local generated generatedSN generatedMLB
400+
399401 restoreState SN " sn" || return 1
400402 restoreState MLB " mlb" || return 1
401403
402404 [ -n " $SN " ] && [ -n " $MLB " ] && return 0
403405
404- # Generate the serial and board serial as one matched pair and persist both;
405- # changing either independently would create an inconsistent Apple identity.
406- # Generate unique serial numbers for machine
407- SN=$( /usr/local/bin/macserial --num 1 --model " ${MODEL} " 2> /dev/null)
406+ # Generate a serial pair and use only the values that are still missing,
407+ # preserving any serial or board serial supplied by the user or restored from state.
408+ generated=$( /usr/local/bin/macserial --num 1 --model " ${MODEL} " 2> /dev/null)
409+
410+ generated=" ${generated##* $' \n ' } "
411+ [[ " $generated " != * " | " * ]] && error " $generated " && return 1
408412
409- SN=" ${SN##* $' \n ' } "
410- [[ " $SN " != * " | " * ]] && error " $SN " && return 1
413+ generatedMLB=${generated#* |}
414+ generatedMLB=" ${generatedMLB# " ${generatedMLB%% [![:space:]]* } " } "
415+ generatedSN=" ${generated%% |* } "
416+ generatedSN=" ${generatedSN% " ${generatedSN##* [![:space:]]} " } "
411417
412- MLB=${SN#* |}
413- MLB=" ${MLB# " ${MLB%% [![:space:]]* } " } "
414- SN=" ${SN%% |* } "
415- SN=" ${SN% " ${SN##* [![:space:]]} " } "
418+ [ -n " $SN " ] || SN=" $generatedSN "
419+ [ -n " $MLB " ] || MLB=" $generatedMLB "
416420
417421 writeState " sn" " $SN " || return 1
418422 writeState " mlb" " $MLB " || return 1
0 commit comments