1 votos

Agregando un salto de línea a una salida de shell en AppleScript

Tengo un script funcionando pero no de la forma que quiero. Aquí está el script

return do shell script "BLUETOOTH_DEFAULTS=$(defaults read /Library/Preferences/com.apple.Bluetooth); SYSTEM_PROFILER=$(system_profiler SPBluetoothDataType); MAC_ADDR=$(grep -b2 \"Minor Type: Headphones\"<<<\"${SYSTEM_PROFILER}\"|awk '/Address/{print $3}'); CONNECTED=$(grep -ia6 \"${MAC_ADDR}\"<<<\"${SYSTEM_PROFILER}\"|awk '/Connected: Yes/{print 1}'); BLUETOOTH_DATA=$(grep -ia6 '\"'\"${MAC_ADDR}\"'\"'<<<\"${BLUETOOTH_DEFAULTS}\"); BATTERY_LEVELS=(\"BatteryPercentCombined\" \"HeadsetBattery\" \"BatteryPercentSingle\" \"BatteryPercentLeft\" \return\"BatteryPercentRight\"); if [[ \"${CONNECTED}\" ]]; then for I in \"${BATTERY_LEVELS[@]}\"; do declare -x \"${I}\"=\"$(awk -v pat=\"${I}\" '$0~pat{gsub (\";\",\"\"); print $3 }'<<<\"${BLUETOOTH_DATA}\")\"; [[ ! -z \"${!I}\" ]] && OUTPUT=\"${OUTPUT} $(awk '/BatteryPercent/{print substr($0,15,1)\": \"}'<<<\"${I}\")${!I}%\"; done; printf \"%s\\n\" \"${OUTPUT}\"; else printf \"%s Not Connected\\n\" \"${OUTPUT}\"; fi" # Version 2.3

Devuelve:

L: 82% R: 88%

Lo que quiero que devuelva es:

L: 82%
R: 88%

No puedo entender cómo agregar el salto de línea. He probado \n, \t, \r, & return &,... nada funciona. Probablemente sea solo mi ignorancia. Sé lo suficiente como para meterme en problemas.

¿Alguna idea?

0 votos

¿Funciona si simplemente ejecutas la parte del script de shell directamente en Terminal? ¿Hace return do shell script "echo L; echo R" lo que deseas?

1voto

Kerry Puntos 100

En el contexto correcto, Unix usa \n o 0x0A.

mac $ echo -e ".\nhi\n."
.
hi
.
mac $ 

Si usas sustitución de comandos ($(...)) las nuevas líneas serán eliminadas. De man bash:

Bash realiza la expansión ejecutando el comando y reemplazando la sustitución del comando con la salida estándar del comando, con cualquier nueva línea final eliminada. Las nuevas líneas incrustadas no se eliminan, pero pueden ser removidas durante la división de palabras.

# evitar que bash manipule la cadena, ya que $z está entre comillas en el echo. 
mac $ z=$(echo -e "L: 82%\nR: 88%")
mac $ echo "$z"
L: 82%
R: 88%
mac $ 

# Con división de comandos ya que la variable $Z no está entre comillas. 
mac $ z=$(echo -e "L: 82%"; echo -e "R: 88%")
mac $ echo $z
L: 82% R: 88%

mac $ echo -e "L: 82%"; echo -e "R: 88%"
L: 82%
R: 88%
mac $ 

Sólo analizaría la salida y agregaría la palabra reservada de retorno de Applescript. asumir que la salida de Unix está en "fromUnix"

global debug
set debug to 0

log alterString(fromUnix, "%", "%"&return)

-- ------------------------------------------------------
(*
alterString
  thisText es la cadena de entrada a cambiar
  delim es la cadena que cambiar. No tiene que ser un solo caracter.
  replacement es la nueva cadena

  devuelve la cadena cambiada. 
*)

on alterString(thisText, delim, replacement)
    global debug
    if debug ≥ 5 then log "in ~~~ alterString ~~~"
    if debug ≥ 6 then
        hexDumpFormatOne("alterString: texto de entrada, thisText,", thisText)
        log "alterString: delim es -->" & delim & "<--"
        hexDumpFormatOne("alterString: cadena de búsqueda de entrada, delim,", delim)
        log "alterString: replacement es " & replacement
    end if
    set resultList to {}
    set {tid, my text item delimiters} to {my text item delimiters, delim}
    try
        set resultList to every text item of thisText
        set text item delimiters to replacement
        set resultString to resultList as string
    on error
        log "alterString: ==> error al alterar la cadena. "
        set resultString to thisText
    end try
    set my text item delimiters to tid
    if debug ≥ 6 then hexDumpFormatOne("alterString: resultString", resultString)
    return resultString
end alterString

0 votos

¿Quién o dónde se está haciendo esta división de palabras? ¡Qué lío: mac $ z=$(ls -l); mac $ echo $z

0 votos

Su shell realiza "división de palabras". ¿Qué sucede cuando se evita la división de palabras en la variable z? -- echo "$z"

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X