La manipulación de la cadena de shell no funciona en Applescript

1

Estoy tratando de hacer un servicio para traducir cosas que Chrome no traduce automáticamente. El siguiente script funciona cuando se ejecuta desde mi shell

#!/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 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 sigue siendo this is a test)))

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

Este script usa un programa llamado Translate-Shell que se puede encontrar en GitHub o en el sitio web del autor del programa aquí .

    
pregunta I0_ol 07.09.2016 - 06:35

1 respuesta

2

No funciona porque, el shell intenta cambiar una 'cadena', no establecer una variable.

El comando como 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 (observe los Eventos en el editor de secuencias de comandos), el comando es:

  

do script de shell "if [[$ (echo 'это тест)))' '= ~') ']]; luego' это   тест))) '= \ "$ (echo \" $ {' это тест))) '//) /} \ ") \"; fi "

Entonces, coloque el contenido de la variable de AppleScript en una variable en el shell (elimino los comandos echo , porque es inútil), de esta manera:

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
    
respondido por el jackjr300 07.09.2016 - 16:28

Lea otras preguntas en las etiquetas