Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Скрипт bash, выдаёт ошибки...  (Прочитано 786 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SDmitryS

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Скрипт bash, выдаёт ошибки...
« : 08 Января 2021, 15:57:34 »
Доброго времени суток!!!
Прошу помощи в корректном написании скрипта...

Код: (bash) [Выделить]
#!/bin/bash

IDLE=600000
STOPCMD="killall kernel-mrr"
STARTCMD="/var/lib/mrr/mrr2.sh?"

STOPPED="yes"
while true; do
    if [ `DISPLAY=:0 su user -c xprintidle` -gt $IDLE ]; then
        if [ $STOPPED = "yes" ]; then
            $STARTCMD
            STOPPED="no"
        fi
    else
        if [ $STOPPED = "no" ]; then
            $STOPCMD
            STOPPED="yes"
        fi
    fi
    sleep 60
done

при запуске выдаёт ошибку

-bash: /var/lib/mrr/start.sh: /bin/bash^M: плохой интерпретатор: Нет такого файла или каталога
« Последнее редактирование: 08 Января 2021, 19:15:43 от ALiEN175 »

Оффлайн jura12

  • Старожил
  • *
  • Сообщений: 1418
  • 20.04
    • Просмотр профиля
Re: Скрипт bash, выдаёт ошибки...
« Ответ #1 : 08 Января 2021, 16:27:40 »
не в винде писали? ^M вроде означает что перевод строки из 2х символов. тут полный ответ.
сопротивление бесполезно

Оффлайн ecc83

  • Старожил
  • *
  • Сообщений: 2121
  • Ubuntu Mate 22.04 LTS
    • Просмотр профиля
Re: Скрипт bash, выдаёт ошибки...
« Ответ #2 : 08 Января 2021, 16:30:20 »
Нет такого файла или каталога

Что в этой фразе Вам не понятно?
Мне например понятно, что у Вас не Ubuntu.

Оффлайн SDmitryS

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Скрипт bash, выдаёт ошибки...
« Ответ #3 : 08 Января 2021, 16:31:33 »
не в винде писали? ^M вроде означает что перевод строки из 2х символов. тут полный ответ.

Точно :) Благодарю. Как то не подумал об этом. Всё заработало.

Пользователь добавил сообщение 08 Января 2021, 19:51:57:
Возник второй вопрос, как в скрипте проверять условие запуска приложения?
т.е. cron отрабатывает каждую минуту скрипт, определяет xprintidle либо закрывает процесс либо запускает, но есть третий вариант, если процесс уже запущен и условие остаётся чтобы его запустить. Как указать третье условие, что если процесс уже запущен то выход???
« Последнее редактирование: 08 Января 2021, 19:51:57 от SDmitryS »

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6690
  • 20% Cooler
    • Просмотр профиля
Re: Скрипт bash, выдаёт ошибки...
« Ответ #4 : 08 Января 2021, 20:48:07 »
pgrep processname > /dev/null && exit
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн SDmitryS

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Скрипт bash, выдаёт ошибки...
« Ответ #5 : 08 Января 2021, 22:28:13 »
Благодарю, за подсказку но всё равно не понимаю, уже бьюсь с этим недели две, вот решил на форуме зарегистрироваться.
Сам я можно сказать ноль в unix.
Прошу не серчать и кто может подсказать правильное написание скрипта.

т.е. ситуация следующая.
в крон добавляю задание одни должен запускать программу если xprintidle соответствует времени, и в тоже время должен проверить есть ли уже этот процесс, если есть то ни чего не делать,
вторая задача проверяет так же время и если xprintidle меньше указанного времени, убивает процесс... и вот ни как не могу побороть всё это.

1 скрипт

#!/bin/sh

if [ `DISPLAY=:0 su user -c xprintidle` -ge 1200000 ]; then
        sh /var/lib/mrr/ftp_start.sh
fi
exit 0

2 скрипт

#!/bin/sh

if [ `DISPLAY=:0 su user -c xprintidle` -lt 1200000 ]; then
    killall kernel-mrr
fi
exit 0

Пробовал запускать цикл, но как то вобще криво работает... В общем не могу я сообразить как правильно.
« Последнее редактирование: 09 Января 2021, 00:40:47 от Azure »

Оффлайн Pilot6

  • Старожил
  • *
  • Сообщений: 14037
  • Xubuntu 18.04
    • Просмотр профиля
Re: Скрипт bash, выдаёт ошибки...
« Ответ #6 : 08 Января 2021, 22:57:10 »
вот решил на форуме зарегистрироваться.
А на том ли форуме?

Сам я можно сказать ноль в unix.
Это форум не про unix.
Я в личке не консультирую. Вопросы задавайте на форуме.

Оффлайн SDmitryS

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Скрипт bash, выдаёт ошибки...
« Ответ #7 : 08 Января 2021, 23:00:50 »
вот решил на форуме зарегистрироваться.
А на том ли форуме?

Сам я можно сказать ноль в unix.
Это форум не про unix.

Спасибо, что хоть не прямо послали :)
Пойду значит дальше искать!!! Всех благ.

Пользователь добавил сообщение 08 Января 2021, 23:23:11:
pgrep processname > /dev/null && exit

Примного благодарен за помощь.
Получилось сделать всё одним скриптом.

#!/bin/sh

if [ `DISPLAY=:0 su user -c xprintidle` -lt 50000 ]; then
        killall kernel-mrr
elif [ `pgrep kernel-mrr` -ge 0 ]; then
        exit
else
        [ `DISPLAY=:0 su user -c xprintidle` -ge 50000 ] && sh /var/lib/mrr/ftp_start.sh
fi
exit

теперь работает как часики.
« Последнее редактирование: 08 Января 2021, 23:23:11 от SDmitryS »

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6690
  • 20% Cooler
    • Просмотр профиля
Re: Скрипт bash, выдаёт ошибки...
« Ответ #8 : 09 Января 2021, 01:14:15 »
elif [ `pgrep kernel-mrr` -ge 0 ]; then
немножко бредово, но работает.
pgrep cам имеет код завершения.
elif pgrep kernel-mrr > /dev/null ; then
Ну и надеюсь, вы в курсе, что конструкция if [...] ;then ...
не является синтаксисом if.
[ -  это команда.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

 

Страница сгенерирована за 0.053 секунд. Запросов: 25.