Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
02.10.2018, 16:29
|
|||
---|---|---|---|
Помогите понять как работает баш-скрипт |
|||
#18+
Добрый день, потихоньку изучаю linux. Есть вот такой скрипт (send_email.sh), который нестабильно работает: Код: coco 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
При запуске: Код: sql 1.
Выдает ошибку: Код: sql 1.
Разбираю скрипт по-строчно: #!/bin/sh это показывает где баш SUBJ="$1" присвоение переменной SUBJ входного параметра номер 1 MAILTO="user3401@pochta.ru" присвоение переменной MAILTO значения "user3401@pochta.ru" FROM="monitor@mail.ru" присвоение переменной FROMзначения "monitor@mail.ru" [ ! -z $1 ] && IN=$(cat $1) || IN=$(cat - ) Это непонятно, по порядку [ ! -z $1 ] - если параметр 1 не пустой && - и IN=$(cat $1) -непонятно || - или IN=$(cat - ) - непонятно /usr/sbin/sendmail -t << EOF запуск /usr/sbin/sendmail с параметром -t и чем-то непонятным (EOF) To: $MAILTO From: $FROM Subject: $SUBJ $IN тут наверное формируется какой-то текст для передачи в /usr/sbin/sendmail, Помогите пожалуйста понять что значит это: IN=$(cat $1) || IN=$(cat - ) EOF, как я понял, это создание текста, который потом подается на вход /usr/sbin/sendmail ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.10.2018, 17:27
|
|||
---|---|---|---|
|
|||
Помогите понять как работает баш-скрипт |
|||
#18+
qqq_2 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Пытается выполнить отмеченную команду, не находит такой файл и отваливается ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.10.2018, 17:35
|
|||
---|---|---|---|
Помогите понять как работает баш-скрипт |
|||
#18+
Vadim Lejninqqq_2 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Пытается выполнить отмеченную команду, не находит такой файл и отваливается Спасибо :) Правильно ли я понял что тут он пытается переменной IN присвоить значение выполнения команды cat файла, который в переменной $1 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.10.2018, 18:02
|
|||
---|---|---|---|
|
|||
Помогите понять как работает баш-скрипт |
|||
#18+
qqq_2, Да все верно, варианты этой команды: Код: sql 1. 2.
смотрим дальше: Видим конвеер команд: тут нужно понимать следующее Код: plaintext
Код: plaintext
То есть конструкция Код: sql 1.
читается так: если cmd1 вернула 0 (то есть завершилась удачно), то выполнить cmd2 если cmd1 вернула ошибку, выполнение конвеера прервать: конструкция Код: sql 1.
читается так: если cmd1 вернула 0 (то есть завершилась удачно), то cmd2 не выполнять если cmd1 вернула ошибку, то выполнить cmd2 Примеры: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
теперь конструкция << формат такой: Код: sql 1. 2. 3. 4. 5.
то есть в Вашем случае, STRING_INPUT_TERMINATOR - это строка EOF Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.10.2018, 18:10
|
|||
---|---|---|---|
|
|||
Помогите понять как работает баш-скрипт |
|||
#18+
Vadim Lejninесли cmd1 вернула 0 (то есть завершилась удачно), то cmd2 не выполнять если cmd1 вернула ошибку, то выполнить cmd2 То есть в данном случае если cat из файла обломился, то читать в IN из стандартного ввода. Вылазящее же при этом сообщение об ошибке вполне ожидаемо и его просто забыли подавить. Или в проверку забыли добавить условие существования читаемого файла. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.10.2018, 18:13
|
|||
---|---|---|---|
|
|||
Помогите понять как работает баш-скрипт |
|||
#18+
В отличии от windows метасимволы в unix подменяются shell а не командой Поэтому: Код: sql 1. 2. 3. 4. 5. 6. 7.
Для отладки я часто использую следующий фокус: Код: sql 1. 2. 3. 4. 5. 6. 7.
Достаточно раскомментировать T=echo и увидишь команды + некоторые команды set Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.10.2018, 18:23
|
|||
---|---|---|---|
Помогите понять как работает баш-скрипт |
|||
#18+
Vadim Lejninqqq_2, Да все верно, варианты этой команды: Код: sql 1. 2.
смотрим дальше: Видим конвеер команд: тут нужно понимать следующее Код: plaintext
Код: plaintext
То есть конструкция Код: sql 1.
читается так: если cmd1 вернула 0 (то есть завершилась удачно), то выполнить cmd2 если cmd1 вернула ошибку, выполнение конвеера прервать: конструкция Код: sql 1.
читается так: если cmd1 вернула 0 (то есть завершилась удачно), то cmd2 не выполнять если cmd1 вернула ошибку, то выполнить cmd2 Примеры: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
теперь конструкция << формат такой: Код: sql 1. 2. 3. 4. 5.
то есть в Вашем случае, STRING_INPUT_TERMINATOR - это строка EOF Код: sql 1. 2. 3. 4.
Теперь вроде все стало понятно и на свох места. Пока впитываю информацию. Благодарю за такой подробный ответ, Вадим! ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.10.2018, 18:30
|
|||
---|---|---|---|
Помогите понять как работает баш-скрипт |
|||
#18+
Vadim Lejnin, Ктсати, поэкспериментировал, получилось что cat - выводит то, что ему идет на вход. Получается что пременной IN присваивается то что пришло на вход send_email.sh ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.10.2018, 18:43
|
|||
---|---|---|---|
|
|||
Помогите понять как работает баш-скрипт |
|||
#18+
qqq_2Vadim Lejnin, Ктсати, поэкспериментировал, получилось что cat - выводит то, что ему идет на вход. Получается что пременной IN присваивается то что пришло на вход send_email.sh Да все верно, часто символ "-" используется как STDIN ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=25&tablet=1&tid=1481257]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 284ms |
total: | 438ms |
0 / 0 |