mc files ожидает `x' кавычки [исправлено в исправленной версии вопроса]
Вы внедрили стандартную рекомендацию запретить отправку «простого текста» (незашифрованного )пароля по незашифрованным SMTP-соединениям [флаг p
в confAUTH_OPTIONS
].
Ваш смарт-хост предлагает только аутентификацию открытым текстом [см. строки AUTH
в ответе EHLO
] , но он не предлагает обновление до зашифрованного соединения [нет STARTTLS
в ответе EHLO
].
set -o extendedglob
first_set=("$@[1,(i)^-*]")
first=${(j[ ])first_set}
будет хранить в $first
конкатенацию всех аргументов до первого, который не начинается с -
с одним пробелом между ними.
Затем за $second
вы можете получить остальные:
second_set=("$@[$#first_set + 1, -1]")
second=${(j[ ])second_set}
В любом случае обратите внимание, что $@
не является строкой , это список из 0 или более строк.
Например, если вы вызываете свой сценарий из оболочки типа Bourne, используя командную строку, такую как:
script.sh -i -l 'foo bar' 'File 1' File\ 2 "File 3"
Это выполняет ваш скрипт как:
execve("/path/to/script.sh", ["script.sh", "-i", "-l", "foo bar",
"File 1", "File 2", "File 3"], environ)
Что становится (при условии, что скрипт начинается с#! /bin/zsh -
):
execve("/bin/zsh", ["/bin/zsh" /* or "script.sh" depending on the system*/,
"-", "/path/to/script.sh", "-i", "-l", "foo bar",
"File 1", "File 2", "File 3"], environ)
И в вашем сценарии $@
будет содержать все те строки в аргументе argv[]
для execve()
, которые идут после /path/to/script.sh
.
Выше мы разделили этот список на два набора($first_set
и $second_set
переменных-массивов ), а затем объединили аргументы в этих наборах в две скалярные переменные($first
и$second
). Но после того, как это объединение будет выполнено, вы больше не сможете вернуться к исходному списку аргументов. Например, $second
в этом случае будет содержать File 1 File 2 File 3
, и невозможно определить, какие из этих пробелов разграничивают аргументы, а какие были частью аргументов.