alibek Опубликовано 26 июля, 2023 · Жалоба Есть скрипт, который долго выполняется в цикле. На каждой итерации он ждет 5 минут, нажатием любой кнопки ожидание можно прекратить. Чтобы к нему можно было подключиться с любого места, он запускается внутри screen. Как можно проверить в скрипте, имеется ли рабочий интерактивный стандартный ввод? Я сделал так: ... if [ -t 0 -a -e /dev/tty ]; then read -t 300 -p "Wait 5 min or any key..." -s -n 1 < /dev/tty else echo "Wait 5 min..." /usr/bin/sleep 300 fi ... Но так почему-то не работает, он всегда работает по второму варианту. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
gibbon Опубликовано 26 июля, 2023 · Жалоба Есть команда tty она выводит имя терминала и устанавливает код возврата 0 если скрипт запущен с терминала igor@d7480:~$ tty; echo $? /dev/pts/0 0 igor@d7480:~$ echo | tty; echo $? не телетайп 1 у нее есть опция -s ничего не выводить, только устанавливать код возврата Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
rm_ Опубликовано 27 июля, 2023 · Жалоба tty -s && echo терминал || echo хз вроде нет Но мне кажется когда скрипт запущен через screen, там всегда будет терминал, даже когда к screen никто не подключён. Вам это надо проверять? Не будет терминала только если запущен из crontab, например. Может кстати лучше так и сделать, чтобы скрипт запускался раз в 5 минут из крона? И добавить проверку на работу предыдущей копии и выход, если какой-то из запусков занял дольше пяти минут. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 27 июля, 2023 · Жалоба 42 минуты назад, rm_ сказал: Но мне кажется когда скрипт запущен через screen, там всегда будет терминал, даже когда к screen никто не подключён. Ну как бы да, в этом и сложность — как узнать, что за терминалом есть действующая клавиатура. В итоге проверку заменил на [ -e /dev/tty ] (убрал проверку, что stdin открыт на tty); если к screen никто не подключен, значит просто нажатия кнопок не будет. Прикладываю итоговый скрипт, вдруг кому пригодится. Качалка с Яндекс.Музыки, точнее вспомогательная оболочка к качалке. yamusic.zip Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
OK-2004 Опубликовано 28 июля, 2023 · Жалоба Вот фрагмент скрипта, который если запущен не в интерактивном режиме валит свой выхлоп в файл лога, мож Вам поможет : ...... if [[ -z "$TERM" ]] || [[ "$TERM" = "dumb" ]] ; then set -vx exec 3>&1 4>&2 exec 1>$r0/${me}_${ymdhm}.debug 2>&1 else set -vx fi ..... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 29 июля, 2023 · Жалоба Неплохо. В screen не пригодится, а вообще нужно будет запомнить. Есть какие-то странности с кавычками. Такой фрагмент скрипта: CMD="/bin/python3.9 ./yamusic.py" [ -n "$SESSION" ] && CMD="$CMD --session-id \"$SESSION\"" [ -n "$DIR" ] && CMD="$CMD --dir $DIR" [ -n "$PATH" ] && CMD="$CMD --path-pattern \"$PATH\"" [ -n "$UA" ] && CMD="$CMD --user-agent \"$UA\"" [ -n "$LOOP" ] && CMD="$CMD $LOOP" [ -n "$OPTS" ] && CMD="$CMD $OPTS" [ -n "$DEBUG" ] && CMD="$CMD --log-level ${DEBUG^^}" [ -n "$DST" ] && CMD="$CMD $DST" echo $CMD $CMD RC=$? Смысл в том, чтобы сформировать команду запуска в зависимости от параметров. Однако этот фрагмент приводит к ошибке в вызываемом скрипте: /bin/python3.9 ./yamusic.py --session-id "..." --dir /MUSIC --path-pattern "#album-artist - #title" --delay 5 --hq --embed-cover --skip-existing --playlist-id user/3 usage: yamusic.py [-h] [--hq] [--skip-existing] [--add-lyrics] [--embed-cover] [--stick-to-artist] [--cover-resolution <Разрешение обложки>] [--delay <Задержка>] [--log-level {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET,VERBOSE}] (--artist-id <ID исполнителя> | --album-id <ID альбома> | --track-id <ID трека> | --playlist-id <владелец плейлиста>/<тип плейлиста> | -u URL) [--unsafe-path] [--dir <Папка>] [--path-pattern <Паттерн>] --session-id <ID сессии> [--user-agent <User-Agent>] yamusic.py: error: unrecognized arguments: - #title" То есть ему чем-то не нравится аргумент --path-pattern. Однако если первую строку вывода скопировать и вставить, то она срабатывает нормально. Такое впечатление, что кавычки, вводимые интерактивно, обрабатываются как-то по особенному. А вот если их добавлять в строку в скрипте, то с ними что-то не то. Нет идей, что тут не нравится bash-у? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...