Dans mon tmux.conf
, j'ai besoin de démarrer une session avec le nom de l'user actuel en majuscules (il s'agit en fait d'une simplification, mais ce sera un exemple).
Imaginez une ligne fictive comme celle-ci, qui est illégale:
new-session -n BananaWindow -s "$(echo "${USER}" | tr '[:lower:]' '[:upper:]')" 'bash -l'
Comment puis-je atteindre ce qui est prévu ci-dessus?
D'après mon expérience, toute recette efficace pour get un .tmux.conf
afin d'exécuter plusieurs commands conditionnellement ne reposant pas sur chaque instruction enveloppée dans un if-shell
utilise plusieurs files et la command source-file
.
Voici comment je fais des profils basés sur l'hôte:
# Use `run-shell` to resolve arbitrary shell commands, and set-environment to # make them available to tmux. # # Note that any variables set with `set-environment` are not available later in # the same conf file, but will be available interactively once the conf file # has loaded--and also in any sourced conf files. run-shell "tmux set-environment -g TMUX_PROFILE $(hostname)" # Here we're just defining a variable to reduce duplication later... set-environment -g TMUX_PROFILE_PATH "${HOME}/.tmux/profiles/${TMUX_PROFILE}.tmux" # The file that contains the instruction to source the proper conf file. We # have to put the command contained in this file in a separate file because of # that `set-environment` issue. source-file "${HOME}/.tmux/profiles/select-profile.tmux"
Contenu de ${HOME}/.tmux/profiles/select-profile.tmux
:
if-shell "test -f ${TMUX_PROFILE_PATH}" 'source-file ${TMUX_PROFILE_PATH}' 'display-message "profile not found: ${TMUX_PROFILE_PATH}"'
Il vous suffit de mettre des configurations spécifiques à l'hôte dans ${HOME}/.tmux/profiles/
, et elles seront chargées automatiquement.
Vous pouvez utiliser une technique similaire pour une session nommée.
run-shell "tmux set-environment -g SESSION_NAME $(echo "${USER}" | tr '[:lower:]' '[:upper:]')" source-file "${HOME}/.tmux/functions/named-session.tmux"
Contenu de ${HOME}/.tmux/functions/named-session.tmux
:
new-session -n BananaWindow -s "${SESSION_NAME}" 'bash -l'