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.)

26
demandé sur Blaszard 2015-08-09 12:50:23

4 réponses

#!/bin/bash
tmux new -s my_session
ruby run.rb
tmux detach
  1. Créer un fichier nommé my_script.sh et donnez-lui le contenu ci-dessus.

  2. Rendre le fichier exécutable en cours d'exécution:

    chmod 755 my_script.sh ou chmod +x my_script.sh

  3. 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'
25
répondu K M Rakibul Islam 2017-02-01 19:33:46

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'
18
répondu Nick 2016-09-14 10:05:17

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!

2
répondu Tom Anthony 2015-08-10 17:43:59

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.

0
répondu jeroent 2018-08-29 07:57:36