我已经为此苦苦挣扎了几个小时,它\xe2\x80\x99让我发疯。当我通过 SSH 连接到家里的机器时,我的默认 shell 是 zsh。我可以用 来确认这一点echo $SHELL,它输出/usr/bin/zsh
当我从 zsh 调用 tmux 时,它会将我带入带有 bash shell 的 tmux 窗格。如果我运行echo $SHELL,它会输出/bin/bash. 如果我然后运行chsh -s /usr/bin/zsh <user>, $SHELL 变量实际上不会更新并且仍然输出\\bin\\bash。
我\xe2\x80\x99m 从 tmux 手册页中知道默认 shell 是在 ~/.tmux.conf 文件中设置的,我\xe2\x80\x98也这样做了,但似乎没有效果。I\xe2\x80\x99ll 在这里包含我的相关配置文件。
\n\n我应该提到,我的 .tmux.conf 中的其他配置正在生效;我的按键绑定工作,颜色匹配等。 Can\xe2\x80\x99t 弄清楚,非常感谢任何帮助。
\n\n硬件是运行最新版本的 raspbian 的 Raspberry Pi 4。
\n\n〜/.tmux.conf:
\n\nunbind C-b\nset-option -g prefix C-q\nbind-key C-q send-prefix\n\nbind h split-window \nbind v split-window -h\n\n#set-option -g pane-border-fg …Run Code Online (Sandbox Code Playgroud) 在~/.profile我在后台运行一个脚本(redshift用于在夜间更改屏幕温度)。
登录后,我可以打开一个终端,然后运行tmux.
然而,此时,随着屏幕温度的重置,红移明显被中断,并且似乎在这个终端中红移再次开始。
这里发生了什么事?我得到的印象~/.profile是针对每个 shell,并在运行 tmux 时再次解析。这可能吗?
有没有办法让bash脚本输入某个按键?我在这里尝试完成的是一个脚本,该脚本将运行Ctrl+B退出tmux。
编辑:我看到有几个人说最好使用特定于程序的命令。如果我想使用 bash 脚本编辑文本文件(在本例中为 bash_aliases 文件)怎么办?
我正在尝试为 tmux 构建一个包装器,它向我显示所有可用会话的菜单,而不是创建一个新会话。但是手册页明确表示这是不可能的(摘自choose-tree命令):
此命令仅在至少连接了一个客户端时才有效。
我怎么能有一个 shell 函数/脚本来向我展示上面的菜单,但没有先进入 tmux?或者也许是一种快捷方式来附加并一次性显示选择器?
我在 Ubuntu 上使用 gnome-terminal,当窗口很小(未最大化或全屏)时,我的 tmux 状态行和 ZSH 右侧提示符都会延伸到窗口的最右侧,这是完美的。

然而,当最大化或全屏时,屏幕右边缘有一个小但令人讨厌的间隙。

有什么办法可以解决这个问题吗?
(我知道这几乎微不足道;请保持友善!)
我在一个多用户登录节点上,这是一个大型国家生物信息学计算场的前端节点,运行 Linux。许多用户通过在登录节点上运行计算密集型作业而行为不端。我不。我想乖一点。事实上,我什至希望我的登录 shell 以良好的级别 4 运行,而不是默认的 0(零)。
重新使用登录 shell 的最方便和最简单的方法是什么?
我目前的设置:
我在一个或多个tmux会话中运行 ast-ksh (KornShell 93) 。系统上的默认 shell bash,但 I exec -l ksh93from~/.bash_profile然后我tmux从 my重新附加到任何正在运行的会话~/.profile,或者如果不存在则创建一个新的。
摘自~/.bash_profile:我什至不想bash用棍子触摸,所以我愿意用它做的就是拥有一个exec我喜欢的外壳。在这个系统上改变一个人的默认 shell 并不容易......
if [ -f $HOME/sw/bin/ksh93 ]; then
exec -l $HOME/sw/bin/ksh93
fi
Run Code Online (Sandbox Code Playgroud)
片段来自~/.profile:我正在检测我是否已经在一个tmux会话中,如果我没有,并且我通过 SSH 登录,我将附加到或生成一个。
if [[ -z $TMUX ]]; then
ssh-add
if [[ -n $SSH_TTY ]]; then
if tmux has-session 2>/dev/null; then
exec tmux attach-session …Run Code Online (Sandbox Code Playgroud) 在 ZSH 提示扩展中,命令 %E 应该是“清除到行尾”。
问题似乎与 BCE(背景颜色擦除)有关。在屏幕中,我可以添加选项defbce on。我找不到任何类似的 tmux 设置。它存在吗?
是否可以制作一个 bash 脚本来启动 tmux 并水平拆分屏幕并watch -n1 tail -n5 file_n在每个脚本中运行?基本上,我多次启动脚本并将其进度写入我想监视的不同文件中。如果我可以从一个脚本运行它而不是自己手动打开 10 个文件,那就太好了。我从来没有使用过 tmux 顺便说一句,这就是我问这个的原因。
有没有办法从正在运行的tmux会话中分离所有终端,除了我实际使用的终端?
看起来有点奇怪,但这样做的意义在于为最终用户远程会话保留一些“持久性”层,同时确保用户仅在“一个外壳”上使用系统。
正如解释在这里,人们很容易根据用户名创建会话:
if [[ "$TMUX" == "" ]] &&
[[ "$SSH_CONNECTION" != "" ]]; then
# Attempt to discover a detached session and attach
# it, else create a new session
WHOAMI=$(whoami)
if tmux has-session -t $WHOAMI 2>/dev/null; then
tmux -2 attach-session -t $WHOAMI
else
tmux -2 new-session -s $WHOAMI
fi
fi
Run Code Online (Sandbox Code Playgroud)
但我也想确保最后一个连接的终端是唯一一个仍然连接到用户tmux会话的终端。
它有办法做到这一点吗?我也接受基于screen(或其他多路复用器)的解决方案;)
在我重新映射Caps Lock到的许多其他修改中Hyper,一个来自Space-cadet 键盘的古老修饰键
。
但是我找不到如何将它用于 Tmux 中的键绑定的示例,它具有类似 Emacs 的键绑定定义,例如C-k在它们两个中都定义了 Ctrl-k,所以我尝试了H-k在 Emacs 中完美运行的方法,但是作为事实证明,不是在 Tmux 中。
来自我的确切绑定定义 .tmux.conf
bind-key -T copy-mode H-k send-keys -X -N 30 scroll-down
Run Code Online (Sandbox Code Playgroud)
导致以下错误:
/home/attila/.tmux.conf:21: unknown key: H-k
Run Code Online (Sandbox Code Playgroud)
我知道有一个技巧可以将Hyper键模仿为同时按下所有其他修饰键,但是我使用xcape,所以这不是一个选项。