Je veux écrire un script Shell qui fait ceci:
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.)
#!/bin/bash
tmux new-session -d -s my_session 'Ruby run.rb'
Créez un fichier nommé my_script.sh
et donnez-lui le contenu ci-dessus.
Rendre le fichier exécutable en lançant:
chmod 755 my_script.sh
ou chmod +x my_script.sh
Ensuite, lancez le script shell:
./my_script.sh
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.
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'
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!
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;.