Problema do AppleScript: 'do shell script' com barras invertidas '/'

1

Eu estou tentando criar um applet que pega os itens selecionados no Finder e cria um ist de links RTF na área de transferência, usando o AppleScript.

O código é:

tell application "Finder" to set s to selection
set r to "{\rtf1"
repeat with i in s
    set t to "Download " & name of i
    set p to POSIX path of (i as text)
    set sed to "echo " & quoted form of p & " | sed s_/Users/0/Dropbox/Public_http://dl.dropbox.com/u/DBid_"
    set l to (do shell script sed) & "?dl"
    set r to r & "{\field{\*\fldinst{HYPERLINK \"" & l & "\"}}{\fldrslt " & t & "}}\par "
end repeat
set r to r & "}"
set fc to "echo " & quoted form of r & " | pbcopy"
do shell script fc

Tudo funciona muito bem, exceto o "eco" final para "pbcopy".

As contrabarras são desconfiguradas e interpretadas como códigos de escape em vez de códigos RTF!

Eu tentei copiar o valor final de var fc manualmente e colá-lo no Terminal, e isso funcionou muito bem.

Mas quando se trata do AppleScript, o "\" é enviado como "\\" e quebra os códigos RTF.

Obrigado por qualquer ajuda!

    
por Ze'ev 15.02.2011 / 20:56

3 respostas

3

Encontrei a solução neste tópico: link

tell application "Finder" to set s to selection
set r to "\"{\rtf1"
repeat with i in s
    set t to "Download " & name of i
    set p to POSIX path of (i as text)
    set sed to "echo " & quoted form of p & " | sed s_/Users/0/Dropbox/Public_http://dl.dropbox.com/u/DBid_"
    set l to (do shell script sed) & "?dl"
    set r to r & "{\field{\*\fldinst{HYPERLINK \"" & l & "\"}}{\fldrslt \"" & t & "\"}}\par "
end repeat
set r to r & "}\""
do shell script "/bin/bash -c 'echo " & r & " | pbcopy'"
    
por 15.02.2011 / 21:40
0

Você precisa usar o pbcopy para copiar seu texto para a área de transferência? O AppleScript tem a capacidade de fazer isso sozinho, usando algo assim:

set the clipboard to r
    
por 15.02.2011 / 21:04
0

Portanto, o problema foi que sh echo interpreta sequências de escape entre aspas simples por padrão.

(do shell script "echo " & quoted form of "\t") is tab → verdadeiro

Qualquer um deles deve preservar as barras invertidas literais:

  • do shell script "shopt -u xpg_echo; echo " & quoted form of "\t"
  • do shell script "/bin/echo " & quoted form of "\t"
  • do shell script "bash -c \"echo " & quoted form of "\t" & "\""

( echo -E não está disponível)

    
por 10.11.2011 / 20:14