Comment écrire un script shell qui démarre une session tmux, puis exécute un script ruby
je veux écrire un script shell qui fait ceci:
- tout d'abord, créez une session tmux
- Deuxièmement, exécutez un script ruby appelé " run.rb " dans la session tmux
En pseudo-code, ce que je veux faire:
tmux new -s my_session
ruby run.rb # NOTE: I want this to run inside the my_session tmux session.
tmux detach
Comment dois-je faire? (Plus de postes que j'ai lu, plus déroutant, c'est tout.)
4 réponses
#!/bin/bash
tmux new -s my_session
ruby run.rb
tmux detach
Créer un fichier nommé
my_script.sh
et donnez-lui le contenu ci-dessus.Rendre le fichier exécutable en cours d'exécution:
chmod 755 my_script.sh
ouchmod +x my_script.sh
puis lancez le script shell:
./my_script.sh
Faire le script shell exécutable
quand vous effectuez le chmod 755 filename
commande vous permettre à tout le monde de lire et d'exécuter le fichier, et le propriétaire du fichier est autorisé à écrire dans le fichier. Vous pouvez avoir besoin de cela pour Perl et d'Autres scripts qui doivent être exécutés via un serveur web. Si vous appliquez 755 à un répertoire, cela signifie que tout le monde peut y aller et obtenir son dossier d'inscription.
ces permissions sont généralement traduites en représentation textuelle de rwxr-xr-x
.
vous pouvez alternativement utiliser chmod +x file_name
sur un fichier pour le rendre exécutable.
mise à Jour:
pour exécuter le script ruby dans le tmux session:
#!/bin/bash
tmux new-session -d -s my_session 'ruby run.rb'
K le code mis à jour de Rakibul Islam contient une commande de détachement inutile à la fin qui provoque un message d'erreur "aucun client trouvé" ( my_session a déjà été détaché et n'est donc pas dans la portée donc tmux ne peut pas comprendre quelle session vous voulez détacher). Le code correct devrait être:
#!/bin/bash
tmux new-session -d -s my_session 'ruby run.rb'
Vous pouvez utiliser teamocil pour le faire facilement. Vous pouvez simplement créer un fichier YAML:
windows:
- name: rubysession
root: ~
layout: tiled
panes:
- ruby run.rb; tmux detach
si vous l'avez appelé "rubysession".yml " puis exécuter:
teamocil rubysession
et cela fonctionnerait parfaitement pour votre but et ne nécessiterait aucun piratage. Aussi teamocil est génial pour des charges d'autres utilisations!
si vous voulez garder votre session tmux en vie après avoir lancé certaines commandes, une solution possible est de lancer une bash avec un fichier init:
tmux new -d -s mysession "bash --init-file foo.script"
où foo.script contiendra vos commandes. Alternativement, vous pouvez transmettre la commande au shell directement depuis la ligne de commande:
tmux new -d -s mysession2 "bash --init-file <(echo ruby run.rb)"
notez que --init-file a été conçu pour lire des fichiers d'initialisation à l'échelle du système comme /etc/bash.bashrc donc vous pourriez vouloir "source" ceux-ci dans votre script.