Run a shell script in new terminal from current terminal

I came here wanting to figure out how to make a script spawn a terminal and run it self in it, so for those who want to do that I figured out this solution:

if [ ! -t 0 ]; then # script is executed outside the terminal?
  # execute the script inside a terminal window with same arguments
  x-terminal-emulator -e "$0" "$@"
  # and abort running the rest of it
  exit 0
fi

Here's a simple example to get you started:

To write a shell script, do this on your command prompt:

echo -e '#!/bin/sh\n echo "hello world"' > abc.sh

This writes:

#!/bin/sh
echo "hello world"

To a file called abc.sh

Next, you want to set it to executable by:

chmod +x abc.sh

Now, you can run it by:

./abc.sh

And you should see:

hello world

On your terminal.

To run it in a new terminal, you can do:

gnome-terminal -x ./abc.sh

or, if it's xterm:

xterm -e ./abc.sh

Here's a list of different terminal emulators.

Alternatively, you just run it in your current terminal, but background it instead by:

./abc.sh &

For gnome try this.

Replace ls with the command you want to run

gnome-terminal -x sh -c "ls|less"

I hope this is what you want


As of January 2020, the -e and -x option in gnome-terminal still run properly but throw out the following warnings:

For -e:

# Option “-e” is deprecated and might be removed in a later version of gnome-terminal.

# Use “-- ” to terminate the options and put the command line to execute after it.

For -x:

# Option “-x” is deprecated and might be removed in a later version of gnome-terminal.

# Use “-- ” to terminate the options and put the command line to execute after it.

Based on that information above, I confirmed that you can run the following two commands without receiving any warning messages:

gnome-terminal -- /bin/sh -c '<your command>'
gnome-terminal -- ./<your script>.sh

I hope this helps anyone else presently having this issue :)