用于启动 tmux 并发出命令的 Bash 脚本

用于启动 tmux 并发出命令的 Bash 脚本

我想使用 nautilus 脚本在特定位置打开一个带有 tmux 会话(或启动一个)的(gnome-)终端,然后在该终端中执行一些命令(例如 nvim $file)。

然而,我遇到了两个问题: 1:我在“tmux”处“运行自定义命令而不是我的 shell”,这样每个终端都在 tmux 会话中启动。这似乎否定了在给定位置打开终端的能力。我尝试将可执行的 test.sh 文件放入其中,~/.local/share/nautilus/scripts/内容为:

#!/bin/bash
gnome-terminal --working-directory=$NAUTILUS_SCRIPT_CURRENT_URI 

这适用于空白配置文件。但是,使用“tmux”作为启动命令时,我只是在 ~ 处得到一个空白终端

2:如果我之后尝试使用任何命令,则不会发生任何情况。

nvim some_file_there

什么都不做,就像echo "hi"and一样exec echo 'hi'

有人可以向我解释这种行为吗?

同时,我已停用终端中的“运行自定义命令”设置。但是,我仍然只能更改工作目录(在此处打​​开终端),但无法发出任何进一步的命令。

我最新的测试脚本仅包含:

#!/bin/bash
zenity --info --text="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
gnome-terminal -e "ls"

是否以某种方式将工作目录更改为 nautilus 脚本启动的目录!它还显示了 ls 命令的结果,但在终端中,一个对话框带以蓝色下拉,显示:“子进程正常退出,状态为 0”。右侧有一个重新启动按钮。 - 我想这意味着,一个新的会话或终端等已启动(子进程),但它不会继续,这样我最终可以使用它!?

有人可以澄清这里发生了什么吗?

答案1

我找到了严重依赖 tmux 的解决方案。由于 tmux 独立于 shell 工作,并且即使在关闭窗口后仍然有效,因此可以准备一个 tmux 会话,然后附加到它。该事物不会立即退出,因为除非您退出,否则附件命令不会返回。

这以及您可以命名和搜索会话的事实会产生以下 Nautilus 脚本:

#!/bin/bash
# nautilus script to start files in nvim under a tmux session
# place this script into ~/.local/share/nautilus/scripts/nvimOpen.sh
# presented without warranty by mike aka curvi

# nvim running in another session? -
# TODO tmux rename-session -t $whaever nvim

# Tmux session 'nvim' is running neovim always!
if tmux has-session -t nvim ; then
  # test if it is open and split it
  for selected_file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ; do
    tmux send-keys -t nvim Escape # change to normal mode
    tmux send-keys -t nvim ";vsp $selected_file" Enter # open file in vsplit
  done
else
  # or start it up freshly!
  tmux new-session -d -s nvim ;
  tmux send-keys -t nvim "nvim -O $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" Enter
  tmux send-keys -t nvim Escape # change to normal mode
fi
# after the tmux session is prepared - attach to it in gnome-terminal!
gnome-terminal -e "tmux attach-session -d -t nvim"

奖励:由于我发送了密钥,而不是直接发出命令,它们像预期的那样出现在终端历史记录中!

;注意:我的 nvim/init.vim 包含to的重新映射:,这意味着,为了运行,必须检查发送的密钥是否有“常规”vim/neovim 设置!

相关内容