Tengo un script (mayoritariamente prestado) que utiliza scutil
para cambiar el nombre de los ordenadores basándose en los valores de un archivo CSV. Hace coincidir el número de serie con un nombre de ordenador, establece una variable y luego renombra el ComputerName
, HostName
y LocalHostName
con la variable Como referencia, el nombre será SFO-C2900-MBP
Aquí está el script:
#!/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-----"
De esto se desprenden dos cosas:
1) Se lanza un error cuando el scriptintenta renombrar el LocalHostName
: SCPreferencesSetLocalHostName() failed: Invalid argument
2) La Terminal, después de salir/reiniciar/etc, hará lo siguiente: El terminal muestra un signo de interrogación sobre la carpeta, también falta el nombre de host
La configuración de estos valores de forma manual a través del terminal mediante scutil --set {def}
funcionan bien y restablecen el comportamiento normal del Terminal.
He probado lo siguiente:
- Eliminando las líneas de LocalHostName del script
- Establecer el valor de LocalHostName a una variable establecida dentro del script y no el archivo CSV.
Principalmente, el problema del script es lo que le hace a Terminal más que nada - puedo trabajar alrededor del problema de LocalHostName. Extrañamente, cuando se ejecuta scutil --get {def}
en ellos, el Terminal produce los valores correctos.
0 votos
¿Ha pensado en citar a su
$compName
variable por si se interpreta como una opción? Inténtalo:scutil --set LocalHostName "$compName"
0 votos
@IanC. No, el mismo problema en el
scutil --set LocalHostName
línea. Me gustaría añadir también que la desaparición del nombre en Terminal se arregla conscutil --set HostName
que se ejecuta manualmente a través del Terminal en lugar del script.0 votos
Y estás llamando a tu script con
sudo <name of the script>
¿verdad?0 votos
@IanC. Sí, el mismo resultado de cualquier manera
0 votos
¿El script establece el HostName y el ComputerName? ¿Sólo no el LocalHostName?
0 votos
@MorganR correcto. También, por la razón que sea, no registrará el cambio de HostName correctamente. Por ejemplo, si ejecuta
scutil --get HostName
se mostrará, pero el Terminal no funcionará correctamente hasta que ejecutescutil --set HostName
con la variable correcta, incluso después de reiniciar.0 votos
Muy extraño. Escribí un simple bash script que logra la misma tarea que tú, pero en lugar de hacer un bucle a través de un CSV, usé grep y awk para aislar el nombre del equipo del SN. Si quieres, puedo publicarlo más abajo. Tal vez el bucle a través de un CSV está recogiendo un carácter extraño que está causando su problema, aunque si ese fuera el caso, me imagino que tanto la configuración de la HostName y ComputerName rompería también.
0 votos
@MorganR ¡Claro! Aunque, la razón por la que usamos el CSV es porque los nombres de nuestros ordenadores se basan en la información de la etiqueta de activos, que el script utiliza el número de serie del sistema para compararlo con una lista de nombres de ordenadores conocidos.
1 votos
@smoooosher @MorganR Una idea para comprobar si un carácter extraño se está incrustando en el valor de la variable: prueba a añadir la línea
echo $compName | od -c
al script después de la sección "loop through the CSV". (Para experimentar con lo queod
lo hace, intente por ejemploecho foo | od -c
en la Terminal...)0 votos
@Ashley Tú. Eres. Increíble. Hubo un \r añadido al campo en el CSV que estaba causando que el cambio de nombre fallara. Utilizando
od
mostró el problema y luego usésed
para eliminar el carácter extraño. Por favor, publique su respuesta como una respuesta y voy a aceptar :)0 votos
¡Genial! Es un placer poder ayudar. He escrito una respuesta. Por cierto, creo que @MorganR merece algo de crédito aquí también, pero lamentablemente no veo una manera de hacerlo en el sistema de recompensas...
0 votos
Ah, pensé que era algo así, pero no tenía ni idea de cómo comprobarlo - ¡no hay que sentirse culpable @Ashley! Me alegro de que se haya resuelto el problema.