28

So I know if I type gnome-terminal or xterm, a new window will be popped out. Then I checked the man page for these two, nothing relevant found.

Then I noticed under Mac you can do it with the program open. But it seems under Linux it's not that trivial.

Does anyone have experience?

pa4080
  • 30,621
J.R.
  • 403

4 Answers4

47

Update: The new recommended syntax is:

gnome-terminal -- bash -c "<my command or script>; exec bash"
  • If you want to reach the users home directory within the above command use the environment variable $HOME: bash -c "cd $HOME/; ..."

If you look at man gnome-terminal (and gnome-terminal --help) the options -x and -e are available (and it is not explicitly written they are deprecated) but all examples there are given by the syntax provided above.


I would prefer to use the option -x that provides more reliable work than -e:

gnome-terminal -x bash -c "<my command or script>; exec bash"
  • 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 <my command or script> will execute that we want.

  • 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.


More examples of usage of this format:

pa4080
  • 30,621
2

You can simply do CTRLALTT and you will open a new terminal.

Try gnome-terminal -e "bash -c command;bash"

lapisdecor
  • 1,647
  • 5
  • 19
  • 39
2

Another approach that will keep the window open is to use xterm:

xterm -hold -e cmd

The hold option keeps the window open.

1

gnome-terminal -e cmd will open a terminal window and run cmd within it.