|
Помогите понять как работает баш-скрипт
|
|||
---|---|---|---|
#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, 16:29 |
|
Помогите понять как работает баш-скрипт
|
|||
---|---|---|---|
#18+
qqq_2 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Пытается выполнить отмеченную команду, не находит такой файл и отваливается ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 17:27 |
|
Помогите понять как работает баш-скрипт
|
|||
---|---|---|---|
#18+
Vadim Lejninqqq_2 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Пытается выполнить отмеченную команду, не находит такой файл и отваливается Спасибо :) Правильно ли я понял что тут он пытается переменной IN присвоить значение выполнения команды cat файла, который в переменной $1 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 17:35 |
|
Помогите понять как работает баш-скрипт
|
|||
---|---|---|---|
#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:02 |
|
Помогите понять как работает баш-скрипт
|
|||
---|---|---|---|
#18+
Vadim Lejninесли cmd1 вернула 0 (то есть завершилась удачно), то cmd2 не выполнять если cmd1 вернула ошибку, то выполнить cmd2 То есть в данном случае если cat из файла обломился, то читать в IN из стандартного ввода. Вылазящее же при этом сообщение об ошибке вполне ожидаемо и его просто забыли подавить. Или в проверку забыли добавить условие существования читаемого файла. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 18:10 |
|
Помогите понять как работает баш-скрипт
|
|||
---|---|---|---|
#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:13 |
|
Помогите понять как работает баш-скрипт
|
|||
---|---|---|---|
#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:23 |
|
Помогите понять как работает баш-скрипт
|
|||
---|---|---|---|
#18+
Vadim Lejnin, Ктсати, поэкспериментировал, получилось что cat - выводит то, что ему идет на вход. Получается что пременной IN присваивается то что пришло на вход send_email.sh ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 18:30 |
|
Помогите понять как работает баш-скрипт
|
|||
---|---|---|---|
#18+
qqq_2Vadim Lejnin, Ктсати, поэкспериментировал, получилось что cat - выводит то, что ему идет на вход. Получается что пременной IN присваивается то что пришло на вход send_email.sh Да все верно, часто символ "-" используется как STDIN ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 18:43 |
|
|
start [/forum/topic.php?fid=25&msg=39711956&tid=1481257]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 144ms |
0 / 0 |