#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 теперь должны выполняться правильно.