I want to write a script to activate a virtual environment and run my server for Django project in a new terminal. My startProject.sh is:

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

And, I can run this script on my current terminal by:

source startProject.sh

I want to do this in a new terminal opened by a script.

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

I tried this too.

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

Both do not work. Why? I read other questions but I still did not get it. I am a beginner, so please assume no experience.


According to my experience the command should be:

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

Notes:

  • The path of --working-directory='/home/<user>/project' is enclosed with single quote marks in case it contains some special characters as spaces, etc.

  • The option -x means: execute - the remainder of the command line inside the terminal.

  • And our command is bash -c "<commands>". That means we execute a new bash shell, which should run some -c "<commands>".

  • We have two separated (by semicolon ; == new line) <commands>.

  • The first command source startProject.sh will source the script file.

  • The second command exec bash has a meaning - remain open the current gnome-terminal window. There are another possible approaches to do that. In the current case the command exec will replace the current process image with a new process image - in other words it will 'kill' the current process and will execute a new (bash) under the current PID.

Further reading:

  • How to launch gnome-terminal from StartupApplications

  • How to launch tmux from StartupApplications

  • How to launch gnome-terminal from StartupApps and execute an application as root

  • How to launch gnome-terminal from Cron

  • How to launch gnome-terminal with few tabs, each with different profile, at system startup