BASH скрипт + переданный параметр + asterisk -rx
Всем привет. Пытаюсь создать небольшой скриптик для Asterisk под мониторинг Zabbix. В скрипте будет прописано 'sip show ', а что show будет передаваться параметром с Zabbix, т.е. аргументом в скрипт. peers registry users.... Если просто запускать скрипт без передачи команды с кодом:
./script.sh
asterisk -rx "sip show registry"
все нормально выполняется и выводится нужная инфа, если же вместо выполняемой команды поставить аргумент, то скрипт не выполняется.
/script.sh registry
asterisk -rx "sip show $1"
или
command=$1
asterisk -rx "sip show $command"
Выходит ошибка поиска команды:
for other possible commands)ow registry
Этот вывод есть огрызок от выполнения команды, если у астериска нет такой команды. Т.е., допустим
asterisk -rx "sip show uncknown_command"
Выведет:
No such command 'sip show uncknown_command' (type 'core show help sip show uncknown_command' for other possible commands)
Вопрос в том, что я делаю не так? И как заставить скрипт получать переданный аргумент и передавать его в команду астериску?
Ответы (1 шт):
В bash файлах окончания строк обязательно должны быть как в Linux (и *nix вообще) - только символ конца строки (line feed), а не как в Windows - возврат каретки (carriage return) + конец строки (line feed).
При передаче параметра в скрипт если в конце строки будет символ возврата каретки, то он будет передан как часть параметра скрипта. Поэтому, чтобы все работало корректно, нужно заменить символы конца строки на *nix вариант.
Типичный случай, когда я сталкивался с подобной проблемой - в начале файла стоит shebang (допустим, #!/usr/bin/env python3), но файл не запускается из-за того что в файле все концы строк в Windows варианте, и к имени исполняемого файла в shebang прилепляется символ возврата каретки.