Как я выполняю команду оболочки от .tmux.conf

В zsh, с помощью zmv:

autoload zmv      # you can put this line in your .zshrc
zmv '(*)\(1\)(*)' '$1$2'

Во втором аргументе (новое имя), $1 и $2 обратитесь к заключенным в скобки группам (PATTERN) в исходном шаблоне. Другой способ записать это переименование

zmv '(*)' '${1/\(1\)/}'

7
28.06.2013, 01:25
4 ответа

Это кажется, что Вы хотите внешне вызвать tmux от своей оболочки вместо того, чтобы делать это из tmux, таким образом, .tmux.conf неправильное место. Можно использовать псевдоним оболочки (поместите это в Ваш .bashrc для повторного использования):

alias tmuxirc='tmux new-session -s irc irssi'
8
27.01.2020, 20:13
  • 1
    ссылок, я использую zsh, но иначе корректных 100%. –  Emanuel Berg 24.06.2013, 22:22

Я делаю что-то похожее со сценарием. Когда я хочу разжечь 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 является просто полноэкранной консолью. Хорошая вещь об этом состоит в том, что это не воссоздаст сессию, если это уже будет там, то это просто присоединит к нему.

5
27.01.2020, 20:13

Хоть это и не то, что вы искали, решение для:

Как мне выполнить команду оболочки из .tmux.conf

- это run-shell, или, в сокращенном виде, run. Из tmux man page:

run-shell shell-command - это  run-shell-command.
 (псевдоним: бежать)
 Выполнить командную оболочку в фоновом режиме, не создавая победы...
 Дух. После его завершения, любой вывод в stdout отображается в
 режим копирования. Если команда не возвращает успех, выход sta-...
 Кроме того, отображается шина.

Если вам нужно бесшумно запускать скрипт в фоновом режиме всякий раз, когда вы запускаете tmux, вы можете использовать , запустив "command > /dev/null".

.
11
27.01.2020, 20:13

На странице руководства 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

Преимущество это решение заключается в том, что вы можете указать разные сценарии для разных проектов или среды.

1
27.01.2020, 20:13

Теги

Похожие вопросы