如何才能同时在 tmux 窗格中运行程序?

如何才能同时在 tmux 窗格中运行程序?

我正在尝试编写一个脚本,打开 4 个 tmux 窗格,并在其中启动一个 python 程序。我想同时执行此操作,但我不知道如何操作。

我试过

tmux new-session "python 'DogeClickBot (2)'/main.py $1 ; read\" && tmux split-window \"python LTCClickBot/main.py $1 ; read"

第一个 Python 程序启动了,但第二个却没有启动。请帮忙!

答案1

转义的双引号使得tmux在新会话中运行以下命令:

python 'DogeClickBot (2)'/main.py substituted1 ; read" && tmux split-window "python LTCClickBot/main.py substituted1 ; read

并且由于引用read && tmux split-window python被解释为单身的命令名称,就像你调用

python … ; "read && tmux split-window python" …

这毫无意义。


未转义的双引号更有意义:

tmux new-session -d "python 'DogeClickBot (2)'/main.py $1 ; read" && tmux split-window "python LTCClickBot/main.py $1 ; read"

这样,您就可以在当前 shell 中运行tmux new-session … && tmux split-window …,这可能就是您想要的。

注意我添加了,-d因为如果没有它,第一个命令将附加到会话,并且下一个部分(&& …)将不会执行,直到您分离或会话被销毁。正确的做法是在最后附加(tmux attach)。

请注意,这种简单的方法可能会引入竞争条件:如果会话在tmux split-window运行前终止怎么办?有关更多信息,请参阅这是我的另一个答案. 最相关的片段:

tmux new-window …[tmux new-session …在你的情况下] 是 tmux 服务器的命令,tmux这里只是一个客户端。客户端成功退出后,你可以确定已经创建了一个新窗口 [会话];但你无法真正知道其中发生了什么,在哪个阶段,或者窗口 [会话] 是否已被销毁。


另外问问自己是否不想引用$1扩展为的内容。在此片段中:

tmux new-session "python 'DogeClickBot (2)'/main.py $1 ; read"

参数已正确用双引号引起来。然后,tmux 服务器生成的 shell 将运行此命令:

python 'DogeClickBot (2)'/main.py substituted1 ; read

substituted1扩展为。$1在此阶段不引用它可能会得到类似的后果不加引号$1。也许这就是你想要的,也许不是。如果不是,那么你很可能需要:

tmux new-session "python 'DogeClickBot (2)'/main.py '$1' ; read"

并在第二条命令中附加类似的引用。

相关内容