Запуск чего-либо из .zshenv - определенно неправильный подход. Этот файл выполняется каждым экземпляром zsh , даже при запуске скрипта. Используйте .zshrc для вещей, которые должны быть выполнены в интерактивных оболочках, и .profile (или .zprofile , если вы установили zsh в качестве оболочки входа в систему) для вещей, которые следует делать при входе в систему.
Если вы хотите использовать tmux в каждом терминале, запустите tmux непосредственно под терминалом, например, gnome-terminal -e tmux (измените ваш графический интерфейс для передачи этих аргументов). Вы можете передавать аргументы даже с -e (хотя будьте осторожны с цитированием), например, gnome-termminal -e 'tmux -s ~/.alternate.tmux.conf' .
Если вы также хотите запустить tmux при входе через ssh, вам придется запустить его из своего ~/.profile . Делайте это только в том случае, если родительским процессом оболочки входа является sshd:
parent_process_name=$(ps -o comm= -p $PPID`)
case ${parent_process_name##*/} in
sshd) type tmux >/dev/null 2>/dev/null && exec tmux;;
esac
Другой подход к запуску tmux через ssh - получить имя сеанса из среды. Таким образом, вы можете присоединиться к существующему сеансу. Самый простой способ - написать небольшой скрипт на стороне сервера, например ~/bin/tmux-login-session:
#!/bin/sh
if tmux has-session -t "$1"; then
exec tmux attach-session -t "$1"
else
. ~/.profile
exec tmux new-session -s "$1"
fi
Затем используйте команду ssh, как показано ниже:
ssh -t hostname.example.com bin/tmux-login-session SESSION_NAME