linux 脚本有时在wget之后不运行

0qx6xfy6  于 2023-01-12  发布在  Linux
关注(0)|答案(3)|浏览(275)

脚本有时在wget之后不运行,也许需要等待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
bt1cpqcv

bt1cpqcv1#

set -e(又名set -o errexit)存在一些缺陷,请参见BashFAQ/105 (Why doesn't set -e (or set -o errexit, or trap ERR) do what I expected?)
如果您不顾这些问题而决定使用set -e,那么设置一个ERR陷阱来显示发生了什么,并使用set -E(又名set -o errtrace)以便它在函数和子shell等中触发,这是一个 * 非常 * 好的主意。

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

这将防止经典的set -e问题:程序突然停止,在一个未知的地方,没有明显的原因。

csga3l58

csga3l582#

set -e下,脚本会在出现任何错误时停止。

set -Eeuo pipefail
#     ^

可能站点有时不可用,或者获取的页面与grep搜索的表达式不匹配。

tpgth1q7

tpgth1q73#

你在做什么

wget -qO- $URL

根据wget man page

-q
--安静

关闭Wget的输出。
这对于查找故障的客观原因是反作用的,默认情况下wget是冗长的,并且将信息写入stderr,如果您希望将其存储到文件中,则可以将stderr重定向到某个文件,请考虑以下简单示例

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

它下载Example Domain并将其内容写入标准输出(-),同时将stderr附加到名为wget_out.txt的文件,因此,如果您运行该命令(例如3次),您将获得wget_out.txt中3次运行的信息

相关问题