我想创建一个别名,让我可以用 FZF 浏览我的所有 tmux 窗口,然后附加该单个窗口。我目前有:
tmux list-windows -t main -F '#{session_name}:#{window_name}' | fzf | xargs "tmux attach -t"
# In FZF, I select a window named "main:mail".
这会导致错误:
open terminal failed: not a terminal
当我添加时echo
,输出的命令看起来很好:
tmux list-windows -t main -F '#{session_name}:#{window_name}' | fzf | xargs echo tmux attach -t```
=> tmux attach -t main:mail
如果我tmux attach -t main:mail
直接运行,它可以正常工作。
知道我做错了什么吗?
没有 fzf 的更简单的分解(会产生相同的错误)是:
echo "main:mail" | xargs tmux attach -t
答案1
tmux
需要 stdin 作为终端,但使用管道将使 stdin 连接到管道输出。另一个可能的解决方案是
tmux attach -t "$(tmux list-windows -t main -F '#{session_name}:#{window_name}' | fzf)"
答案2
以下是一个解决方法,但我希望知道上述方法不起作用的原因并找到更好的解决方案:
run-shell tmux list-windows -t main -F "#{session_name}:#{window_name}" | fzf > /tmp/tmux-session && tmux attach -t $(cat /tmp/tmux-session)