Скрипт работает нормально на 1 машине, выдает ошибку на другом

Этот сценарий ничего не делает, кроме вывода получаемых сигналов.

kill -l "$i"

заменяет номер сигнала на имя.

Я бы изменил этот сценарий на

#!/bin/bash

echo "My PID is $$"
echo "Send SIGNALS with this command:"
echo "     kill -SIG $$"
echo "SIG may be either a signal name or number, see kill -l"

for i in {1..64}; do
    trap "echo 'signal[$$] Caught signal SIG$(kill -l "$i")($i)'" "$i";
done;

read -s -n1;
-1
09.03.2018, 18:41
2 ответа

Ваш код:

echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue o
n '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t

больно читать. Хуже того, даже если вы -отформатируете его, чтобы сделать его читабельным, бесполезное использование sedбудет странным -просто неправильным. Вы используете sedдля вставки заголовков электронной почты перед выводом оператора эха. В этом нет никакого смысла.

Короче говоря, вам не нужно использовать здесь sed, и вы не должны использовать здесь sed. Это не добавляет ничего, кроме дополнительных сложностей и возможностей для ошибок.

Вместо этого сделайте что-нибудь подобное:

sendmail -t <<EOF
From: $sFr
To: $sTo
Subject: *ALERT* - Mail queue on '$host' exceeds limit

There are $qSize emails in the mail queue

EOF

или вот так:

subject="*ALERT* - Mail queue on '$host' exceeds limit"
message="There are $qSize emails in the mail queue"

echo "$message" | sendmail -f "$sFR" -s "$subject" "$sTO"

или даже так:

{
  echo "From: $sFr"
  echo "To: $sTo"
  echo "Subject: *ALERT* - Mail queue on '$host' exceeds limit"
  echo
  echo "There are $qSize emails in the mail queue"
} | sendmail -t

Даже так лучше:

echo "From: $sFr
To: $sTo
Subject: *ALERT* - Mail queue on '$host' exceeds limit

There are $qSize emails in the mail queue" | sendmail -t

Короче говоря, почти любой другой способ передачи нескольких строк текста в другую программу (sendmail, в данном случае )предпочтительнее того, как это делаете вы.

1
28.01.2020, 05:08

У вас две линии

echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue o
n '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t

должно быть одной строкой

echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue on '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t

т. е. ошибка, скорее всего, возникла из-за того, как вы копировали/вставляли ее на этот компьютер.

Дело в том, что проблема в 79 колонке (В 80 колонке отображается? )как бы подтверждает это.

1
28.01.2020, 05:08

Теги

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