4

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.

3

1 Answer 1

5

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:

7
  • It worked! Thank you for explaining one by one! :)
    – Heuyie
    Oct 23, 2017 at 19:07
  • Happy to help, @Heuyie! :)
    – pa4080
    Oct 23, 2017 at 19:11
  • One more question. Is gnome-terminal bash or dash command? Why do not I need to specify a shell to run this command?
    – Heuyie
    Oct 23, 2017 at 23:40
  • @Heuyie: In the above solutions we specify a shell, because: (1) source is Shell Builtin Command (find 'source' in the section Bash Builtin Commands), and in other case gnome-terminal will do something wrong; (2) We want to execute a second command to remain the window open.
    – pa4080
    Oct 24, 2017 at 17:46
  • gnome-terminal is a program, executable file that is located within a directory listed in your $PATH envvar, so it is accesible as shell command. See also: How do I modify my $PATH?
    – pa4080
    Oct 24, 2017 at 17:47

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .