Open a new terminal and source scripts

7,463

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:

Share:
7,463

Related videos on Youtube

Heuyie
Author by

Heuyie

Updated on September 18, 2022

Comments

  • Heuyie
    Heuyie over 1 year

    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.

  • Heuyie
    Heuyie over 6 years
    It worked! Thank you for explaining one by one! :)
  • pa4080
    pa4080 over 6 years
    Happy to help, @Heuyie! :)
  • Heuyie
    Heuyie over 6 years
    One more question. Is gnome-terminal bash or dash command? Why do not I need to specify a shell to run this command?
  • pa4080
    pa4080 over 6 years
    @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
    pa4080 over 6 years
    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?
  • Heuyie
    Heuyie over 6 years
    > it is accesible as shell command I did not know this! I was looking at list of bash/dash commands and could not find it. Thank you again! :)
  • pa4080
    pa4080 over 6 years
    @Heuyie, I remembered for this collection: “Envoriment variable PATH” on Ubuntu.