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

4

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.