tmux не может найти работающий сервер при выполнении из скрипта bash

#bash #tmux

#bash #tmux

Вопрос:

У меня есть простой скрипт bash со многими командами, как показано ниже:

 (cd /home/mc/ ;
echo msg-here ;
tmux send-keys -t mc "say xyz" ENTER ;
echo successful ;) > scripts/logs/$(date  %d-%m-%Y).txt
 

При выполнении скрипта я получаю результат no server running on /tmp/tmux-0/default в своем терминале, несмотря на то, что я могу выполнить tmux send-keys -t mc "say xyz" ENTER из терминала без проблем.


Примечания

  • Я запускаю скрипт и команду из одного и того же места (и оба как mc пользователь).
  • Вывод в файл журнала не показывает сообщение об ошибке, а вместо этого выглядит так, как будто все сработало.

Спасибо

Комментарии:

1. /tmp/tmux-0/ предположим, что ваш скрипт выполняется под идентификатором пользователя 0, поскольку место, используемое tmux по умолчанию, создается на основе идентификатора.

2. Вы только перенаправляете стандартный вывод в файл журнала. Большинство программ Unix печатают ошибки в stderr. Вместо >logfile того, чтобы вам нужно >logfile 2>amp;1 . Более того, echo команды выполняются безоговорочно, поэтому они вводят в заблуждение, заявляя, что операция прошла «успешно». Вместо этого вам понадобится что-то вроде tmux ... amp;amp; echo successful .

Ответ №1:

Внимание: это всего лишь обходной путь — однако, похоже, он работает безупречно для моего варианта использования.

Метод: я создал новый скрипт bash myscript-entry.sh , который запускает основной скрипт от имени фактического пользователя.

Далее следует содержимое скрипта.

 su -c "/home/mc/myscript.sh" - mc
 

Выполнить sudo ./myscript-entry.sh из каталога, содержащего оба скрипта (или где угодно, поскольку скрипт «entry» использует абсолютный путь), и команды tmux теперь должны выполняться правильно.