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

1

thunderbird -compose "attachment='$HOME/test test.txt'" funciona. thunderbird -compose "attachment='$HOME/test, test.txt'" não funciona e fornece uma mensagem de erro file does not exist .

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 argumentos compose 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" de vírgulas no nome do arquivo.

Nota:

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

Ambos

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

e

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

trabalho.

Nem

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

nem

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

funciona.

    
por Omid 31.07.2013 / 03:15

1 resposta

0

Usando a idéia de URL codificando os nomes de arquivos sugeridos por @Etan Reisner (em um comentário à minha pergunta acima), eu hackeei uma solução que eu gravo aqui para o benefício de outras pessoas na comunidade. No snippet abaixo, ${filename} é 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/\(..\)/%/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}'"
    
por 10.02.2015 / 20:43