我正在尝试编写一个脚本,打开 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"
并在第二条命令中附加类似的引用。