1

thunderbird -compose "attachment='$HOME/test test.txt'" работает. thunderbird -compose "attachment='$HOME/test, test.txt'" не работает и выдает сообщение об ошибке file does not exist .

Это должно быть из-за того, как Thunderbird обрабатывает аргументы командной строки; например,

thunderbird -compose "to='name@mail.com',attachment='~/file.txt'"

В compose аргументы , и что должно быть , почему наличие в имени файла ломает вещи. Однако я не могу придумать, как "экранировать" запятые в имени файла.

Замечания:

  • В Thunderbird 3+ использование файла протокола file:// больше не требуется.

И то и другое

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

а также

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

Работа.

ни

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

ни

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

работает.

1 ответ1

0

Используя идею кодирования URL-адресов имен файлов, предложенную @Etan Reisner (в комментарии к моему вопросу выше), я взломал решение, которое я записал здесь для блага других в сообществе. В приведенном ниже фрагменте ${filename} - это полное имя файла (включая путь), которое нужно присоединить.

#!/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}'"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .