В zsh, с помощью zmv:
autoload zmv # you can put this line in your .zshrc
zmv '(*)\(1\)(*)' '$1$2'
Во втором аргументе (новое имя), $1
и $2
обратитесь к заключенным в скобки группам (PATTERN)
в исходном шаблоне. Другой способ записать это переименование
zmv '(*)' '${1/\(1\)/}'
Это кажется, что Вы хотите внешне вызвать tmux от своей оболочки вместо того, чтобы делать это из tmux, таким образом, .tmux.conf
неправильное место. Можно использовать псевдоним оболочки (поместите это в Ваш .bashrc
для повторного использования):
alias tmuxirc='tmux new-session -s irc irssi'
Я делаю что-то похожее со сценарием. Когда я хочу разжечь tmux со своей настройкой разработки, я называю его. Сам сценарий похож на следующее:
#!/bin/sh
tmux has-session -t development
if [ $? != 0 ]; then
tmux new-session -s development -n editor -d
tmux send-keys -t development 'cd /var/www/htdocs/' C-m
tmux send-keys -t development 'vim' C-m
tmux split-window -v -t development
tmux split-window -v -t development
tmux select-layout -t development main-horizontal
tmux send-keys -t development:0.1 'cd /var/www/htdocs/' C-m
tmux new-window -n console -t development
tmux send-keys -t development:1 'cd /var/www/htdocs/' C-m
tmux select-window -t development:0
fi
tmux attach -t development
То, что это дает мне, является tmux сессией с 2 окнами, окно 1 имеет сессию Vim в вершине экрана с двумя терминалами в нижней части, приблизительно 3-й из экрана, все указали на мой/var/www/htdocs/каталог. Окно 2 является просто полноэкранной консолью. Хорошая вещь об этом состоит в том, что это не воссоздаст сессию, если это уже будет там, то это просто присоединит к нему.
Хоть это и не то, что вы искали, решение для:
Как мне выполнить команду оболочки из .tmux.conf
- это run-shell
, или, в сокращенном виде, run
. Из tmux
man page:
run-shell shell-command
- этоrun-shell-command
. (псевдоним: бежать) Выполнить командную оболочку в фоновом режиме, не создавая победы... Дух. После его завершения, любой вывод в stdout отображается в режим копирования. Если команда не возвращает успех, выход sta-... Кроме того, отображается шина.
Если вам нужно бесшумно запускать скрипт в фоновом режиме всякий раз, когда вы запускаете tmux
, вы можете использовать , запустив "command > /dev/null"
.
На странице руководства tmux
есть команда display-message
:
display-message [-p] [-c target-client] [-t target -pane] [message]
(псевдоним: display)
Показать сообщение. Если задано -p, вывод выводится на стандартный вывод, в противном случае он отображается в строке состояния целевого клиента. Формат сообщения описан в разделе ФОРМАТЫ; информация берется из целевой панели, если задано -t, в противном случае - активная панель для сеанса, подключенного к целевому клиенту.
В разделе FORMATS есть переменная с именем имя_сеанса
, она будет заменена именем сеанса, если вы используете его в формате # {имя_сеанса}
.
Попробуйте запустить tmux display-message -p '# {session_name}'
, когда вы находитесь в сеансе tmux. Возможно, вы увидите число, это идентификатор подключенного сеанса. Запустите tmux ls
, чтобы проверить список сеансов.
Однако, когда вы запускаете tmux с помощью tmux new -s myproject
, вы увидите myproject
в качестве вывода, но не число. Потому что вы указали имя сеанса при запуске tmux.
Итак, мое решение - поместить фрагмент кода в файл ~ / .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
mkdir ~/.tmux
cat "__before__.sh" > ~/.tmux/__before__.sh
cat "__after__.sh" > ~/.tmux/__after__.sh
cat "sample.sh" > ~/.tmux/sample.sh
tmux new -s sample
Вы увидите результат на каждой созданной вами панели:
__before__.sh
sample.sh
__after__.sh
Преимущество это решение заключается в том, что вы можете указать разные сценарии для разных проектов или среды.