How do I run .sh scripts?
Whenever I open a .sh file, it opens it in gedit instead of the terminal. I can't find any option similar to Right Click → Open With → Other Application... → Terminal.
How do I open this file in the terminal?
616 Answers
Give execute permission to your script:
chmod +x /path/to/yourscript.shAnd to run your script:
/path/to/yourscript.shSince . refers to the current directory: if yourscript.sh is in the current directory, you can simplify this to:
./yourscript.sh 5 You need to mark shell scripts as executable to run them from the file manager:
Right click on your
.shfile and select Properties:In the Permissions tab, check Allow executing file as program:
Close the Properties window and double-click the file. A dialog will pop up giving you the option to run the script in a terminal:
Open a terminal and navigate to the folder where the .sh file is located. Then type:
sh <name of file>.sh 4 Prerequisite
Before you can run the .sh file, you need to make it executable:
- Right-click on the file
- Select Properties
- Select Permissions
- Select Allow executing file as a program
Warning
Make sure you trust the source where you got the file from. It could be a virus.
The very simple way
- Double-click on the file
- Click run in terminal
This has problem. The terminal will close immediately and you will not be able to see the output.
The simple way
- Open Applications -> Accessories -> Terminal
- Drag and drop the .sh file into the terminal and press Enter
The way professionals do it
- Open Applications -> Accessories -> Terminal
Find where the .sh file
- Use the
lsandcdcommands lswill list the files and folders in the current folder. Give it a try: type "ls" and press Enter.- Once you see the folder that you want to go in to, run
cd, followed by a space, followed by a folder name - If you when into a folder that you did not want, run
cd ..to go one level up
- Use the
Run the .sh file
Once you can see for example
script1.shwithlsrun this:./script.sh
Why do it the complicated way?
The terminal has a rich set of powerful tools that are accessible by typing the commands. Professionals locate the .sh file by typing ls and cd. Once you are in the correct current folder you can run the script like this:
./script1.shor you can run and redirect the output to a file:
./script1.sh > out.txtor you can filter the output for keywords (e.g. "apples") an then redirect to a file:
./script1.sh | grep apples > ./only-applesThere are thousands of things you can to to that file just by typing a few commands.
Another one, you can download a file from the Internet with one simple command:
wget And then open the file like this:
shotwell ps_logo2.png 2 On Ubuntu 13.04 executable files opened in Nautilus are now opened in gedit by default rather than prompting the user to execute them. To enable the classic behavior you need to adjust the preferences:
Nautilus → Edit menu → Preferences → Behaviour tab → Click the radio button near Ask each time.
5For Ubuntu 18.04, There is a little modification, as you don't get a pop-up dialog.
So what you need to do is:
Right click on Files, Select Preferences > Select Behavior Tab > Mark 'Ask what to do' option under Executable text file.
Now, When you double-click on any .sh file, you will get a popup, there you can select "run in terminal" option to run your .sh file.
3Go to the directory where the .sh file is by using cd. In this example I have stored my sh file as ~/Desktop/shell_practice/test.sh
first do pwd to figure out where you are, and if it returns /home/username (where username is your real username), you can run
cd Desktop/shell/practiceIf you seem to be somewhere else, you can use the absolute path
cd ~/Desktop/shell/practiceor
cd $HOME/Desktop/shell/practiceor even
cd /home/$USER/Desktop/shell/practicethese are all ways of describing the same place. Once you've made it to the location of your script, type
lsIf you can see the sh file in the output, you can use chmod to make it executable. In my case, remember, the filename is test.sh, so I would run
chmod u+x test.shNow that we are in the same directory as the script, we have to specify to the shell that we want to execute the file by giving its location ./ (the current directory followed by a path separator, to distinguish it from the filename). To run my file I would type:
./test.shIf your script has been written correctly it will run without errors...
2There are a few ways to do this.
Option 1
In the terminal, access the directory the Bash file is in using
cd(change directory).Ex.
cd DownloadsRun
bash <filename>.shThis also works with .run files. There is an example of this usage at this webpage on updating Rhythmbox.
Option 2
In the terminal, navigate to the directory the bash file is in.
Run
chmod +x <filename>.shIn Nautilus, open the file.
2 main steps.
in terminal, use gedit to write and save script with ".sh" extension to desktop. (but any text editor can be used)
open Nautilus and right click the script.sh file.
under properties, check box "allow executing file.."
in Nautilus menu, click file,then preferences,then behaviour
check the "run executable text files when they are opened".
Now, when you double click the file on the desktop, it should execute.
no need for . or ./
Right-click the
.shfile and make it executable.Open a terminal (Ctrl+Alt+T).
Drag the
.shfile into the terminal window and watch in awe.
In Ubuntu 16.04 this is how to open it in Terminal:
Go to the File Manager > Edit > Preferences > Behavior for Executable Text Files and select Ask each time.
The problem is that it's by default set to View Executable Files when they are opened.
If you place your shell script or other executable you create in /usr/local/bin it will be found and executed without having to provide a folder path in the command line or adding ./ to the name. For example I created the following simple 3 line bash script to display disk UUIDs:
#!/bin/bash
echo "* UUIDs must match in /etc/fstab and /boot/grub/menu.lst"
sudo blkidI called the file uuid and placed it in /usr/local/bin. All I need enter on the command line is:
uuid Well, I too faced the same problem. I wanted to execute the .sh file and it opened with Gedit on CentOS 7. So here is what I did:
- I navigated to the path of the
.shfile I wanted to execute. - I opened the terminal.
- And I simply dragged and dropped the on the terminal window and it automatically took that file along with the path as input.
- Hit Enter and you are good to go!
The problem I have found on a few distributions is they have hidden the preferences option in Nautilus, but to fix it in Ubuntu and other distributions using Gnome3 is the same (literally just done the Fedora version of this and posting the actual fix to remind me how in the future).
Install
dconf-editorsudo apt-get install dconf-editorRun
dconf-editorusing the user account you want this on, i.e NOT rootdconf-editorNavigate to the following schema:
org.gnome.nautilus.preferences
Change the default option to not open by default:
Find
executable-text-activationclick the worddisplayand change toask
that will give you the option to edit, view or run the file going forward
I am a noob in Linux and I just had the same problem. If all else fails:
- Open terminal
- Open the folder containing the .sh file
- Drag and drop the file into the terminal window
- The file's path appears in terminal. Press Enter.
- Voila, your .sh file is run.
You can also use . tricks, with the suggestion of other answers.
For example:
chmod +x filename.sh, assuming you have already gone to the path to file then run the file with any one of these command:
sh filename.sh
./filename.sh
. filename.sh 1