hac*_*r15 38 ruby bash shell tmux
我想编写一个执行此操作的shell脚本:
在伪代码中,我想做什么:
tmux new -s my_session
ruby run.rb # NOTE: I want this to run inside the my_session tmux session.
tmux detach
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?(我读的帖子越多,就会越混乱.)
K M*_*lam 39
#!/bin/bash
tmux new-session -d -s my_session 'ruby run.rb'
Run Code Online (Sandbox Code Playgroud)
创建一个名为的文件my_script.sh并为其提供上述内容.
通过运行使文件可执行:
chmod 755 my_script.sh
要么
chmod +x my_script.sh
然后运行shell脚本:
./my_script.sh
执行该chmod 755 filename命令时,允许每个人读取和执行该文件,并允许文件所有者写入该文件.对于应该通过Web服务器运行的Perl和其他脚本,您可能需要这样做.如果您将755应用于目录,则意味着每个人都可以访问它并获取其文件列表.
这些权限通常被翻译成文本表示rwxr-xr-x.
您也可以使用chmod +x file_name文件使其可执行.
Nic*_*ick 21
KM Rakibul Islam的更新代码在末尾包含一个不必要的detach命令,导致错误消息"找不到客户端"(my_session已经分离,因此不在范围内,因此tmux无法理解您要分离的会话).正确的代码应该是:
#!/bin/bash
tmux new-session -d -s my_session 'ruby run.rb'
Run Code Online (Sandbox Code Playgroud)
Qua*_*Van 14
通过一些实验,我想出了如何通过 shell 脚本控制 tmux。
tmux new-session -d -s htop-session 'htop'; # start new detached tmux session, run htop
tmux split-window; # split the detached tmux session
tmux send 'htop -t' ENTER; # send 2nd command 'htop -t' to 2nd pane. I believe there's a `--target` option to target specific pane.
tmux a; # open (attach) tmux session.
Run Code Online (Sandbox Code Playgroud)
以上将 tmux 会话拆分为两个窗口,并htop在两个窗口中运行。
要回答原始问题,您可以运行 ruby 脚本而不是使用以下命令分离 tmux 会话:
tmux new-session -s ruby_session 'ruby run.rb'; # open tmux session and run ruby script.
Run Code Online (Sandbox Code Playgroud)
如果你想在启动一些命令后保持 tmux 会话处于活动状态,一个可能的解决方案是使用 init 文件启动 bash:
tmux new -d -s mysession "bash --init-file foo.script"
Run Code Online (Sandbox Code Playgroud)
其中 foo.script 将包含您的命令。或者,您可以直接从命令行向 shell 提供命令:
tmux new -d -s mysession2 "bash --init-file <(echo ruby run.rb)"
Run Code Online (Sandbox Code Playgroud)
请注意,--init-file 用于读取系统范围的初始化文件,例如 /etc/bash.bashrc,因此您可能希望在脚本中“获取”这些文件。
| 归档时间: |
|
| 查看次数: |
33907 次 |
| 最近记录: |