Возможно, существует более простой способ сделать это с помощью самого tmux, не прибегая к сценариям оболочки. Но я заработал, объединив пару скриптов.
Первый сценарий выводит имя первого неприсоединенного сеанса. Это,tmux-first-unattached-session
:
#!/usr/bin/env sh
# Print the name of the first tmux session that has no clients attached.
tmux ls -F '#{session_name}|#{?session_attached,attached,not attached}' 2>/dev/null | grep 'not attached$' | tail -n 1 | cut -d '|' -f1
Второй скрипт присоединяется к первому неприсоединенному сеансу или новому сеансу:
#!/usr/bin/env sh
# Attach to the first tmux session that has no attached clients.
# If there are no unattached sessions, then create a new session.
tmux attach -t `,tmux-first-unattached-session` 2> /dev/null || tmux
Удалите все экземпляры /bin/bash
в ваших crontab
заданиях; замените его одним SHELL=/bin/bash
в crontab
.
cron
по умолчанию — /bin/sh
. bin/sh
не поддерживает использование аббревиатуры ~
для домашнего каталога пользователя, и ее использование здесь может привести к «плохим привычкам». Рассмотрите возможность замены всех экземпляров ~
полным путем; например./home/theuser/.bash_aliases
Мне вообще непонятно, почему вы используете root's crontab
(, то естьsudo crontab -e
)-LTspice обычно не требует повышенных привилегий для запуска. Отбросьтеsudo
-используйте своего пользователя crontab
.
Наконец, поскольку задания cron
по умолчанию отправляют все выходные данные в /dev/null
, рассмотрите возможность использования перенаправления для захвата выходных данных stderr
:
0 4 * * * * /bin/bash ~/Documents/auto.bash 2>~/Documents/error.log