Table of Contents
Various installation guides in Linux involve running a shell script first, which we download and then execute separately using Bash. Not only installation guides but also custom shell scripts written for automating manual activities involve downloading and executing scripts.
In this tutorial, we’ll cover a way using curl and wget to download and execute a script in a single step.
This is my test script at https://raw.githubusercontent.com/bonben365/test/main/test.sh.
https://raw.githubusercontent.com/bonben365/test/main/test.sh
Download and Execute a Bash Script Using curl
Some Linux distributions may not have curl installed by default. We can install it using the following command:
###Ubuntu/Debian
sudo apt-get -y install curl
###CentOs/Fedora/Redhat
sudo yum -y install curl
curl -s https://raw.githubusercontent.com/bonben365/test/main/test.sh | bash
When we use the -s option, we’re asking curl to get all content at the URL silently which doesn’t display statistics like average download speed and total time.
# Output
root@vm-524705709:/# curl -s https://raw.githubusercontent.com/bonben365/test/main/test.sh | bash
******************************************************
* This is a test script *
* Author: https://bonben365.com.com *
******************************************************
Download and Execute a Bash Script Using wget
Most Linux distributions have wget installed by default.
###Ubuntu/Debian
sudo apt-get -y install wget
###CentOs/Fedora/Redhat
sudo yum -y install wget
Now, to download and execute a script with wget, we can use the -q0 options, a hyphen, and then pipe the result to bash:
wget -qO - https://raw.githubusercontent.com/bonben365/test/main/test.sh | bash
The option O is used to save the content of test.sh to a file. The trailing hyphen (the one between -qO and https://) is to tell wget to direct this content to /dev/stdout. Anything directed to /dev/stdout is displayed right on the terminal, that’s the reason why the content of test.sh is never written to disk.
If we use wget without a trailing hyphen and capital O, then get will save the content of the file to disk with the filename script.sh. This is because wget is actually used to download files in Linux.
On the other hand, curl will never download files by default.
# Output
root@vm-524705709:/# wget -qO - https://raw.githubusercontent.com/bonben365/test/main/test.sh | bash
******************************************************
* This is a test script *
* Author: https://bonben365.com.com *
******************************************************