7

Я определил функцию в ~/.zshrc:

foo() { print "FOO" }

Я хотел бы вывести его в моей строке состояния Tmux. Я добавил это в ~/.tmux.conf:

set -g status-right "foo: #(foo)"

Но я вижу только статическую часть этого; вывод функции отсутствует. (Хотя моя действительная функция более сложна, это верно даже для приведенного выше тривиального примера.)

Это прекрасно работает, когда я вызываю скрипт вместо функции. Какая разница? Можно ли там использовать функцию?

1 ответ1

7

Страница man tmux сообщает о параметре set :

#(shell-command) Первая строка вывода команды

Но я почти уверен, что это не означает функции оболочки, потому что tmux не выполнит команду shell-command в текущем сеансе оболочки, но запустит новый экземпляр, который начинается как неинтерактивный, поэтому не получает исходный текст ~/ Конфигурация ~/.zshrc и так не знает о функциях, определенных в нем.

Чтобы обойти это, вы можете создать скрипт оболочки с именем foo

#!/bin/zsh -f

source ~/.zshrc   # or just the desired function to save parsing time
# use some functions defined in ~/.zshrc

print "FOO"

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