Usando o Thunderbird, como anexar a partir da linha de comando um arquivo contendo vírgulas (,) em seu nome?

1

thunderbird -compose "attachment='$HOME/test test.txt'"trabalho. thunderbird -compose "attachment='$HOME/test, test.txt'"não funciona e dá uma file does not existmensagem de erro.

Isso deve ser devido à maneira como o Thunderbird lida com argumentos de linha de comando; por exemplo,

thunderbird -compose "to='[email protected]',attachment='~/file.txt'"

Os composeargumentos são separados por ,e deve ser por isso que ter um ,no nome do arquivo quebra as coisas. No entanto, não consigo pensar em uma maneira de "escapar" vírgulas no nome do arquivo.

Nota:

  • No Thunderbird 3+, o uso do protocolo file://não é mais necessário.

Ambos

thunderbird -compose "attachment='$HOME/test test.txt'"

e

thunderbird -compose "attachment='file://$HOME/test test.txt'"

trabalhos.

Nem

thunderbird -compose "attachment='$HOME/test, test.txt'"

nem

thunderbird -compose "attachment='file://$HOME/test, test.txt'"

trabalho.

Omid
fonte
11
Em um palpite, eu sugeriria tentar escapar \,ou codificá- %2Clo.
Etan Reisner 31/07
Escolher vírgula ( \,) não funciona; dá o mesmo file does not exist error. Os caracteres ,e %são ambos legítimos no nome do arquivo para que eu não acho que a codificação URL é uma opção porque test,teste test%2Ctestsão ambos nomes de arquivos legítimos.
Omid
2
Enquanto true test%2Ctestse tornaria test%252Ctestquando o URL fosse codificado. Vale a pena tentar (talvez seja necessário o file://prefixo explícito para funcionar, mas não sei).
Etan Reisner 31/07
Parece um bug no script do wrapper.
Ignacio Vazquez-Abrams

Respostas:

0

Usando a idéia de URL que codifica os nomes de arquivos sugeridos por @Etan Reisner (em um comentário à minha pergunta acima), invadi uma solução que gravei aqui para o benefício de outras pessoas na comunidade. No trecho abaixo, ${filename}está o nome completo do arquivo (incluindo o caminho) a ser anexado.

#!/bin/bash

# "A safe way to URL encode is to encode every single byte, even
# those that would've been allowed." This is done by first
# converting every byte to its 2-byte hex code using `hexdump' and
# then adding the prefix `%' to each 2-byte hex code pair using
# `sed'.
#
# Attribution: https://stackoverflow.com/a/7506695

filenameurlencoded=$(echo -ne "${filename}" | \
hexdump -v -e '/1 "%02x"' | \
sed 's/\(..\)/%\1/g')

filenamenopath="$(basename ${filename})"
emailsubject="${filenamenopath}"
emailbody="\"${filenamenopath}\" is attached."
emailattachment="file:///${filenameurlencoded}"

# Syntax of -compose command line option: double-quotes enclose
# full comma-separated list of arguments passed to -compose,
# whereas single quotes are used to group items for the same
# argument.
#
# Attribution: http://kb.mozillazine.org/Command_line_arguments_(Thunderbird)

thunderbird -compose "subject='${emailsubject}',body='${emailbody}',attachment='${emailattachment}'"
Omid
fonte