如何编写启动tmux会话的shell脚本,然后运行ruby脚本

我想编写一个执行此操作的shell脚本:

  • 首先,创建一个tmux会话
  • 其次,在tmux会话中运行一个名为“run.rb”的ruby脚本

在伪代码中,我想做什么:

tmux new -s my_session ruby run.rb # NOTE: I want this to run inside the my_session tmux session. tmux detach 

我该怎么做呢? (我读的post越多,就会越混乱。)

 #!/bin/bash tmux new -s my_session ruby run.rb tmux detach 
  1. 创建一个名为my_script.sh的文件,并为其提供上述内容。

  2. 通过运行使文件可执行:

    chmod 755 my_script.shchmod +x my_script.sh

  3. 然后运行shell脚本:

    ./my_script.sh

使shell脚本可执行

执行chmod 755 filename命令时,允许每个人读取并执行该文件,并允许文件所有者写入该文件。 对于应该通过Web服务器运行的Perl和其他脚本,您可能需要这样做。 如果您将755应用于目录,则意味着每个人都可以访问它并获取其文件列表。

这些权限通常被翻译为rwxr-xr-x文本表示。

您也可以在文件上使用chmod +x file_name使其可执行。

更新:

要在tmux会话中运行ruby脚本:

 #!/bin/bash tmux new-session -d -s my_session 'ruby run.rb' 

KM Rakibul Islam的更新代码最后包含一个不必要的分离命令,导致错误消息“找不到客户端”( my_session已经分离,因此不在范围内,因此tmux无法理解您要分离的会话)。 正确的代码应该是:

 #!/bin/bash tmux new-session -d -s my_session 'ruby run.rb' 

您可以使用teamocil轻松完成此操作。 你可以创建一个YAML文件:

 windows: - name: rubysession root: ~ layout: tiled panes: - ruby run.rb; tmux detach 

如果你将它命名为’rubysession.yml’,那么运行:

 teamocil rubysession 

这对你的目的完全有效,不需要任何黑客攻击。 此外,teamocil非常适合其他用途!

如果要在启动某些命令后保持tmux会话处于活动状态,可能的解决方案是使用init文件启动bash:

 tmux new -d -s mysession "bash --init-file foo.script" 

其中foo.script将包含您的命令。 或者,您可以直接从命令行将命令提供给shell:

 tmux new -d -s mysession2 "bash --init-file <(echo ruby run.rb)" 

请注意, - init-file用于读取系统范围的初始化文件,如/etc/bash.bashrc,因此您可能希望在脚本中“获取”这些文件。