将变量传递给另一个窗格

将变量传递给另一个窗格

我正在使用 tmux,我想将一些信息从一个窗格传递到另一个窗格。

例如,在第一个窗格中,我通过 pwd 命令获取了文件夹,而不是将其复制粘贴到另一个窗格,我想将此结果分配给某个变量并在另一个变量中使用它。我认为我不能使用 bash 变量,因为它们存在于 bash 会话或配置文件中。

有什么办法可以解决这个问题吗?

答案1

普通的旧临时文件:

$ 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 进程运行的东西复制(继承)。

答案2

有一款轻量、快速且非常方便的工具,可用于需要数据缓存或交换的任何地方,而无需花费大量精力进行编码。它的名字是 Redis,在这里可以这样使用:

  1. 你启动 redis-server
  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

如果您知道如何在 shell 中编写陷阱,您可以创建一个函数,当您的目标会话被用户信号锁定(“终止”)时,该函数将被调用。然后,该函数会将 redis 中找到的作为键的变量设置为适当的值。

相关内容