2

Мой bash-скрипт имеет несколько функций, и мне нужна одна панель tmux для выполнения функции в bash-скрипте. Например, приведенный ниже код не будет работать и будет сообщено, что команда "internal" не найдена.

common() {
internal() {
echo "Function executed"
}   

SESSIONNAME="ses"

tmux new-session -s $SESSIONNAME -n session -d
tmux split-window -t $SESSIONNAME:0 -h

tmux send-keys 'internal' 'C-m'
tmux select-window -t $SESSIONNAME:0
tmux attach -t $SESSIONNAME
}

Итак, как я могу сказать tmux выполнить функцию из скрипта, где была вызвана панель tmux?

2 ответа2

1

Насколько я знаю, вы не можете экспортировать функции оболочки в экземпляр tmux. По крайней мере, в версии 1.9 справочной страницы tmux на нее нет ссылок.

Я не думаю, что это вообще возможно, так как контекст сценария, в котором вы создаете сеанс tmux, полностью отличается от контекста внутри сеанса tmux. Таким образом, он даже не может знать эти функции. Кроме того, tmux может даже использовать оболочку, отличную от той, которую вы используете.

Однако, чтобы предоставить некоторые альтернативы, вы можете сделать следующее:

  1. Напишите другой скрипт, поместите в него свою internal функцию и используйте его вместо этого.
  2. Напишите сценарий библиотеки, содержащий все ваши функции, но не более того, source этот сценарий библиотеки в сценарии приложения, чтобы его функции стали там доступны, и используйте вместо этого эти сценарии приложения.

Второй вариант также дает вам больше гигиены кода и лучшую возможность повторного использования.

0

Я написал функцию bash, которая принимает функцию в качестве аргумента и загружает ее в сеанс tmux с помощью 'send-keys'. Очевидно, что на принимающей панели tmux должна быть запущена bash или что-то совместимое, когда эта функция запускается.

_pass_to_tmux() {
    _FUNC_TO_PASS="${1}"
    _IFS_BACKUP="${IFS}"
    IFS=$'\n'
    for i in $(type ${_FUNC_TO_PASS} | tail -n +2); do
        tmux send-keys "${i}" C-m
    done 
    IFS="${_IFS_BACKUP}"
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .