Home > Software design >  The script sometimes doesn't run after wget
The script sometimes doesn't run after wget

Time:01-12

The script sometimes doesn't run after wget. Perhaps it is necessary to wait for the completion of wget?

#!/usr/bin/env bash

set -Eeuo pipefail

# Installing tor-browser
echo -en "\033[1;33m Installing tor-browser... \033[0m \n"
URL='https://tor.eff.org/download/' # Official mirror https://www.torproject.org/download/, may be blocked
LINK=$(wget -qO- $URL | grep -oP -m 1 'href="\K/dist. ?ALL.tar.xz')
URL='https://tor.eff.org'${LINK}
curl --location $URL | tar xJ --extract --verbose --preserve-permissions
sudo mv tor-browser /opt
sudo chown -R $USER /opt/tor-browser
cd /opt/tor-browser
./start-tor-browser.desktop --register-app

CodePudding user response:

There are pitfalls associated with set -e (aka set -o errexit). See BashFAQ/105 (Why doesn't set -e (or set -o errexit, or trap ERR) do what I expected?).

If you decide to use set -e despite the problems then it's a very good idea to set up an ERR trap to show what has happened, and use set -E (aka set -o errtrace) so it fires in functions and subshells etc. A basic ERR trap can be set up with

trap 'echo "ERROR: ERR trap: line $LINENO" >&2' ERR

This will prevent the classic set -e problem: the program stops suddenly, at an unknown place, and for no obvious reason.

CodePudding user response:

Under set -e, the script stops on any error.

set -Eeuo pipefail
#     ^

Maybe the site is sometimes unavailable, or the fetched page doesn't match the expression grep is searching for.

CodePudding user response:

You are doing

wget -qO- $URL

according to wget man page

-q

--quiet

Turn off Wget's output.

this is counterproductive for finding objective cause of malfunction, by default wget is verbose and write information to stderr, if you wish to store that into file you might redirect stderr to some file, consider following simple example

wget -O - http://www.example.com 2>>wget_out.txt

it does download Example Domain and write its' content to standard output (-) whilst stderr is appended to file named wget_out.txt, therefore if you run that command e.g. 3 times you will have information from 3 runs in wget_out.txt

  • Related