2013-03-06 96 views
9

我想要tmux打开一个新窗口,然后cd进入一个目录,但它不起作用。它只是在脚本运行的目录中打开tmux(即它不执行cd命令)。简单的tmux bash脚本不工作

有人能告诉我我做错了什么吗? (我正在使用tmux 1.6)

#!/bin/bash                                
tmux start-server 
tmux new-session -d -s my_server -n runstuff 

tmux send-keys -t my_server:1 "cd /etc" 

tmux select-window -t my_server:1 
tmux attach-session -t my_server 

回答

12

我终于得到它的工作,使用C-m和编号从0开始的窗口。我添加了第二个命令用于说明目的。

#!/bin/bash                                
tmux start-server 
tmux new-session -d -s my_server -n runstuff 
tmux new-window -t my_server:1 -n someotherjunk 

tmux send-keys -t my_server:0 "cd /etc" C-m 
tmux send-keys -t my_server:1 "./yolo" C-m 

tmux select-window -t my_server:runstuff 
tmux attach-session -t my_server 
+0

您可以在这里省略'start-server',它不是必需的;因为您不会从同一'tmux' shell命令创建任何会话,所以它启动的服务器会立即退出。你可以做'开始会话'; new-session ...'在一个shell命令中发出多个* tmux *命令,但是没有必要这样做,因为如果没有一个命令已经运行,'new-session'会启动服务器。另一个自动启动服务器的命令是'attach-session'(只有在你的配置文件中创建会话时才有用)。 – 2013-03-07 08:30:31

1

send-keys模拟在键盘上打字。因此,您还需要发送输入密钥。

tmux send-keys -t my_server:1 "cd /etc\n" 
+1

感谢您的建议。我试过了,但它似乎仍然没有执行cd命令。我只是在与运行bash脚本的目录相同的目录中的tmux窗口中结束。 – mark 2013-03-06 22:56:06

+1

好吧,我意识到我应该使用:0而不是:1。但是现在我最终得到的是一个带有“cd/etc \ n”输入的tmux窗口。\ n正在被逐字处理,而不是Enter键。 – mark 2013-03-07 00:50:11

+0

啊,在发送密钥行末尾添加C-m似乎工作正常。 'tmux send-keys -t my_server:1“cd/etc”C-m' – mark 2013-03-07 00:54:37