Há um comando display-message
em tmux
, da página man:
display-message [-p] [-c target-client] [-t target-pane] [message]
(alias: display)
Display a message. If -p is given, the output is printed to stdout, otherwise it is displayed in the target-client status line. The format of message is described in the FORMATS section; information is taken from target-pane if -t is given, otherwise the active pane for the session attached to target-client.
E na seção FORMATS, há uma variável chamada session_name
, ela será substituída pelo nome da sessão se você a usar no formato #{session_name}
.
Tente executar tmux display-message -p '#{session_name}'
quando estiver em uma sessão do tmux. Talvez você veja um número, é o id da sessão que você anexou. Execute tmux ls
para verificar a lista de sessões.
No entanto, quando você iniciar um tmux por tmux new -s myproject
, verá myproject
como a saída, mas não um número. Porque você especificou o nome da sessão quando você inicia o tmux.
Então, minha solução é colocar um trecho de código no arquivo ~/.bashrc
:
# [tmux] load scripts in ~/.tmux on creating a new pane
# load order: __before__.sh, ${session_name}.sh, __after__.sh
function tmux_load_startup_scripts_by_session_name() {
if [[ -n ${TMUX} ]]; then
local env_before_script="${HOME}/.tmux/__before__.sh"
[[ -f "${env_before_script}" ]] && { . "${env_before_script}"; }
local env_main_script="${HOME}/.tmux/$(tmux display-message -p '#{session_name}').sh"
[[ -f "${env_main_script}" ]] && { . "${env_main_script}"; }
local env_after_script="${HOME}/.tmux/__after__.sh"
[[ -f "${env_after_script}" ]] && { . "${env_after_script}"; }
fi
}
tmux_load_startup_scripts_by_session_name
Uso
mkdir ~/.tmux
cat "__before__.sh" > ~/.tmux/__before__.sh
cat "__after__.sh" > ~/.tmux/__after__.sh
cat "sample.sh" > ~/.tmux/sample.sh
tmux new -s sample
Você verá a saída em cada painel criado:
__before__.sh
sample.sh
__after__.sh
A vantagem desta solução é que você pode especificar scripts diferentes para projetos ou ambientes diferentes.