1 votos

Manipulación de cadena de Shell no funciona en Applescript

Estoy tratando de hacer un servicio a traducir cosas que Chrome no traduce de forma automática. La siguiente secuencia de comandos funciona cuando se ejecuta desde mi concha

#!/bin/bash

input='это тест)))' # translates to - this is a test)))
if [[ $(echo "$input") =~ ')' ]]; then 
    input="$(echo "${input//)/}")"
fi
export PATH="/usr/local/bin:$PATH"; /usr/local/bin/trans -e yandex -b :en "$input" 

el resultado: this is a test

Sin embargo, cuando me pongo esto en un Applescript:

set input to "это тест)))"
set output to (do shell script "if [[ $(echo " & quoted form of input & ") =~ ')' ]]; then " & quoted form of input & "=\"$(echo \"${" & quoted form of input & "//)/}\")\"; fi; export PATH=\"/usr/local/bin:$PATH\"; /usr/local/bin/trans -e google -b :en " & quoted form of input & "")

display dialog output as string

El resultado es this is a test)))

Todavía se ejecuta y se traduce en la cadena de entrada. Pero no elimina la ))). No entiendo por qué la if declaración no está funcionando en mi applescript versión. Estoy citando algo mal?

Este script utiliza un programa llamado Traducir-Shell que se puede encontrar en GitHub o en el programa de la página del autor aquí.

2voto

Baczek Puntos 150

No funciona porque el shell de intentar cambiar una 'cadena', no para establecer una variable.

El comando de ejemplo:

do shell script "if [[ $(echo " & quoted form of input & ") =~ ')' ]]; then " & quoted form of input & "=\"$(echo \"${" & quoted form of input & "//)/}\")\"; fi; "

Después de la concatenación (Mira los Eventos en el editor de secuencias de comandos), el comando es:

do shell script "if [[ $(echo 'это тест)))') =~ ')' ]]; a continuación, 'это тест)))'=\"$(echo \"${'это тест)))'//)/}\")\"; fi; "


Por lo tanto, ponga el contenido de la AppleScript's variable en una variable del shell (puedo quitar el eco de los comandos, porque es inútil), como este:

set input to "это тест)))"
set output to do shell script "input=" & (quoted form of input) & "; if [[  \"$input\" =~ ')' ]]; then input=${input//)/}; fi; export PATH=\"/usr/local/bin:$PATH\"; /usr/local/bin/trans -e google -b :en \"$input\""
display dialog output

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