web-dev-qa-db-fra.com

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" à l'intérieur de 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 puis-je faire cela? (Plus de messages que j'ai lus, plus cela devient confus.)

31
hackstar15
#!/bin/bash
tmux new-session -d -s my_session 'Ruby run.rb'
  1. Créez un fichier nommé my_script.sh et donnez-lui le contenu ci-dessus.

  2. Rendre le fichier exécutable en lançant:

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

  3. Ensuite, lancez le script shell:

    ./my_script.sh

Rendre le script shell exécutable

Lorsque vous exécutez la commande chmod 755 filename, vous autorisez tout le monde à lire et à exécuter le fichier. Le propriétaire du fichier est également autorisé à écrire sur le fichier. Vous en aurez peut-être besoin pour Perl et d’autres scripts devant être exécutés via un serveur Web. Si vous appliquez 755 à un répertoire, cela signifie que tout le monde peut y accéder et obtenir sa liste de fichiers.

Ces autorisations sont généralement traduites en représentation textuelle de rwxr-xr-x.

Vous pouvez également utiliser chmod +x file_name sur un fichier pour le rendre exécutable.

30
K M Rakibul Islam

Le code mis à jour de KM Rakibul Islam contient une commande de détachement inutile à la fin, qui génère un message d'erreur "Aucun client trouvé" ( my_session a déjà été déconnecté et n'est donc pas dans la portée, donc tmux ne peut pas comprendre quelle session vous souhaitez détacher) . Le code correct devrait être:

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

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 nommé 'rubysession.yml', lancez:

teamocil rubysession

Et cela fonctionnerait parfaitement pour votre but et n'exigerait aucun piratage. Aussi teamocil est génial pour des tas d'autres utilisations!

2
Tom Anthony

Si vous voulez garder votre session tmux active après avoir lancé certaines commandes, une solution possible est de démarrer un bash avec un fichier init:

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

où foo.script contiendrait vos commandes. Vous pouvez également transmettre la commande au shell directement à partir de la ligne de commande:

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

Notez que --init-file était destiné à la lecture de fichiers d'initialisation à l'échelle du système, tels que /etc/bash.bashrc;.

0
jeroent