Утверждение «Если» нарушает его собственное правило, или я делаю это

string=$(cat pom.xml | grep developerConnection | sed -e s/\<developerConnection\>scm:git:ssh://g)
echo string
echo $string
developerConnection=$(echo ${string//[[:blank:]]/} | cut -c 3- | sed s/developerConnection//g |  head -c-4)
echo developerConnection
developerConnection=$(echo $developerConnection| sed 's/gitlab.tools.russianpost.ru\//gitlab.tools.russianpost.ru:/g')
echo developerConnection
0
21.09.2021, 23:21
1 ответ

Эта строка:

sendnot=$(echo... | mail... < <(./ssl-cert-check...))

запускает команды echo, mailи ./ssl-cert-checkтут же и фиксирует вывод всей партии, т. е. вывод mail, и присваивает его переменной sendnot. Вот почему вы получаете электронное письмо, отправленное независимо от оператора if -. Кроме того, mail, вероятно, не выводит здесь много, поэтому использование подстановки команд кажется ненужным.

Если вы хотите просто сохранить команду для дальнейшего использования, сделайте ее функцией.

send_notice() {
    local subject=$1
    echo "some message" | mail -s "$subject"
}
...
if whatever...; then
    send_notice "subject line..."
fi

($1будет первым аргументом функции.)

Кроме того, есть еще одна проблема с этой командой :, вы используете канал и перенаправление ввода на mail. Вы не можете подключить две разные вещи к стандартному вводу команды, поэтому применяется только одна. При множественных перенаправлениях останется в силе последнее; с трубой и перенаправлением это перенаправление.

Значит, ваша команда там практически равна:

mail -s... < <(./ssl-cert-check...)

т. е. echoна самом деле ничего не делает.

Если вы хотите объединить выходные данные двух команд, вам нужно сделать что-то вроде этого:

(echo "some message";./ssl-cert-check...) | mail...
3
22.09.2021, 09:52

Теги

Похожие вопросы