web-dev-qa-db-fra.com

Ouvrir un nouveau terminal et des scripts source

Je veux écrire un script pour activer un environnement virtuel et exécuter mon serveur pour le projet Django dans un nouveau terminal. Mon startProject.sh est:

#!/bin/bash
source virtualenv/bin/activate
python manage.py runserver

Et, je peux exécuter ce script sur mon terminal actuel en:

source startProject.sh

Je veux le faire dans un nouveau terminal ouvert par un script.

#!/bin/bash
gnome-terminal --working-directory=/home/myname/project -x 'source startProject.sh'

J'ai essayé ça aussi.

#!/bin/bash
gnome-terminal --working-directory=/home/myname/project -x '#!/bin/bash\n source startProject.sh'

Les deux ne fonctionnent pas. Pourquoi? J'ai lu d'autres questions mais je ne l'ai toujours pas compris. Je suis un débutant, alors n’assume aucune expérience.

2
Heuyie

Selon mon expérience, la commande devrait être:

gnome-terminal --working-directory='/home/<user>/project' -x bash -c "source startProject.sh; exec bash"

Remarques:

  • Le chemin de --working-directory='/home/<user>/project' est entouré de guillemets simples au cas où il contient des caractères spéciaux tels que des espaces, etc.

  • L'option -x signifie: execute - le reste de la ligne de commande à l'intérieur du terminal.

  • Et notre commande est bash -c "<commands>". Cela signifie que nous exécutons un nouveau shell bash, qui devrait exécuter un certain -c "<commands>".

  • Nous en avons deux séparés (par un point-virgule ; == new line) <commands>.

  • La première commande source startProject.sh sera source le fichier de script .

  • La deuxième commande exec bash a une signification - reste ouverte dans la fenêtre gnome-terminal actuelle. Il y a ne autre approche possible pour le faire. Dans le cas présent, la commande exec va remplacer l’image de processus en cours par une nouvelle image de processus . En d’autres termes, elle "tue" le processus en cours et exécutera un nouveau (bash) sous le PID actuel.

Lectures complémentaires:

1
pa4080