1

Я работаю с tmux и хочу передать некоторую информацию с одной панели на другую.

Например, в первой панели я получил папку с помощью команды pwd и вместо copypast на другую панель я хочу присвоить этот результат какой-то переменной и использовать ее в другой. Я думаю, что не могу использовать переменные bash, потому что они живут в сеансе bash или в конфигурационном файле.

Есть идеи, чтобы решить эту проблему?

2 ответа2

2

Обычные старые временные файлы:

$ pwd > /tmp/loc

$ cd "$(</tmp/loc)"

$ cd "`</tmp/loc`"

$(< file) похож на $(cat file) ; Вы можете пропустить двойные кавычки, если в содержимом нет пробелов.

Если вы заключите это в функцию или что-то еще, замените /tmp/file на ~/tmp/file или даже $XDG_RUNTIME_DIR/file для некоторой безопасности:

put() { echo "${*:2}" > "$XDG_RUNTIME_DIR/var-$1"; }
get() { cat "$XDG_RUNTIME_DIR/var-$1"; }
forget() { rm -f "$XDG_RUNTIME_DIR/var-$1"; }

$ put somedir "$(pwd)"

$ cd "$(get somedir)"

Вы можете получить более изящные и хранить переменные в ядре ключей через keyctl (только для Linux):

put() { keyctl add user "$1" "${*:2}" @u; }
get() { keyctl pipe "$(keyctl search @u user "$1")"; }
forget() { keyctl unlink "$(keyctl search @u user "$1")"; }

Да, переменные bash живут внутри самого процесса bash; если вы export переменную, она копируется в "среду" этого процесса и копируется (наследуется) по материалам, которые вы запускаете из этого процесса bash.

1

Существует легкий, быстрый и довольно удобный инструмент, который используется везде, где требуется кэширование или обмен данными без больших усилий по написанию кода. Redis - это имя, и здесь его можно использовать так:

  1. вы запускаете редис-сервер
  2. Вы вызываете redis-cli, устанавливая любую клавишу на нужное значение за один сеанс
  3. Вы вызываете Redis-Cli, получая значение требуемого ключа в другой сессии

Как это:

#> redis-server &

shell session1> var_from_session1="I was set in session1"
shell session1> redis-cli set var_from_session1 "$var_from_session1"
OK



shell session2> var_from_session1=`redis-cli get var_from_session1`
echo $var_from_session1
I was set in session1

Если вы знаете, как писать ловушки в оболочке, вы можете создать функцию, которая вызывается, когда целевой сеанс нацелен ("убит") с помощью пользовательского сигнала. Затем эта функция установит переменные, найденные как ключи в redis, в соответствующие значения.

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