LINUX.ORG.RU

Запуск скрипта питон из баш с параметрами. Не получается

 ,


0

1

Есть скрипт, который парсит текстовый файл на выходе выдавая некое значение. В скрипт передаются 2 параметра в формате:

/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt “CSQ - field”

Надо запустить его при помощи bash, но передваая в баш 2 параметра и формируя строку, которая нормально запускается в консоли, но не из баш. Сам баш примитивный, но победить я его никак не могу (

str1="\""$1" - "$2"\""
/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt $str1

Подскажите советом

которая нормально запускается в консоли, но не из баш

А консоль на чем? Там тот же шелл обычно. Попробуй set -x в начале скрипта и посмотри правильно ли формируется строка, может что-то не так передаётся

Оно будет построчно выводить каждую команду с резолвом переменных и прочим

upcFrost ★★★★★ ()
Последнее исправление: upcFrost (всего исправлений: 1)

Навскидку - кавычки вокруг $str1, а не внутрь :)

Elyas ★★★★★ ()
Последнее исправление: Elyas (всего исправлений: 1)
Ответ на: комментарий от upcFrost

Вот результат с set -x Все выгдятит нормально, но…

./csqstats.sh FCCPS-CSQ loggedinagents
+ str1='"FCCPS-CSQ - loggedinagents"'
+ str2='/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt '
+ '/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt "FCCPS-CSQ - loggedinagents"'
./csqstats.sh: line 7: /usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt "FCCPS-CSQ - loggedinagents": No such file or directory

Смущает наличие одинарных ковычек конечно, но возможно так оно просто отображается.

alexniko2018 ()
Ответ на: комментарий от alexniko2018

Притом строка на выходе, которая

/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt "FCCPS-CSQ - loggedinagents"

запускается если ее скопировать в консоль и все работает

alexniko2018 ()

Зачем так много кавычек?

Достаточно такого:

str1="\"$1 - $2\""

Из-под какого пользователя запускаешь? Покажи

ls -la $(which python3)
ls -la /opt/uccx-stats/uccx_parse.py
ls -la /opt/uccx-stats/_uccx_csqstats.txt
shell-script ★★★★★ ()
Ответ на: комментарий от shell-script
lrwxrwxrwx 1 root root 9 Mar 13  2020 /usr/bin/python3 -> python3.8
-rwxrwxrwx 1 root root 740 Aug 18 20:38 /opt/uccx-stats/uccx_parse.py
-rw-r--r-- 1 getcsq getcsq 974 Aug 19 16:40 /opt/uccx-stats/_uccx_csqstats.txt

getcsq - это пользователь от имени которого крутися сервис который раз в 10 секунд обновляет текстовый файл. Может ли это быть проблемой?

alexniko2018 ()
Ответ на: комментарий от alexniko2018

Ты всю эту строку вызываешь, как команду - вот и No such file or directory. Где-то лишние кавычки. Покажи этот csqstats.sh целиком.

gasinvein ★★★ ()
Ответ на: комментарий от alexniko2018

запуск сервиса от имени рута

Не делай так никогда, если сервис не планируется к штатному запуску от рута на постоянной основе (то есть это сервис с систмно-административными функциями). Рут это ни в коем случае не способ проверки/игнорирования прав доступа (как виндузятники костыльно используют запуск от админа), это юзер для системного администрирования. Нарушение этого принципа ведёт к загаживанию и/или компрометации системы и к нарушению последующей работы сервиса от штатного юзера (после разового запуска от рута может прийтись чистить за ним чтобы починить нормальную работу).

firkax ★★★ ()
Последнее исправление: firkax (всего исправлений: 2)

Сделай так:

str1="$1 - $2"
/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt "$str1"
или так
/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt "$1 - $2"
Кавычки, которые ты писал в оригинальной команде вокруг последнего аргумента - не часть аргумента, а часть синтаксиса шелла, которая означает не делить аргумент по пробелам. И они должны быть именно в командной строке, а не в переменной.

firkax ★★★ ()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от alexniko2018

Повторю - рут это НЕ средство для тестирования прав, вообще никаким боком. Подобные привычки крайне пагубно сказываются на системе, избавляйся от них. Права настраиваются на конкретных файлах командами chmod и chown.

firkax ★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.