脚本有时在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
3条答案
按热度按时间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等中触发,这是一个 * 非常 * 好的主意。这将防止经典的
set -e
问题:程序突然停止,在一个未知的地方,没有明显的原因。csga3l582#
在
set -e
下,脚本会在出现任何错误时停止。可能站点有时不可用,或者获取的页面与
grep
搜索的表达式不匹配。tpgth1q73#
你在做什么
根据
wget
man page-q
--安静
关闭Wget的输出。
这对于查找故障的客观原因是反作用的,默认情况下
wget
是冗长的,并且将信息写入stderr,如果您希望将其存储到文件中,则可以将stderr重定向到某个文件,请考虑以下简单示例它下载Example Domain并将其内容写入标准输出(
-
),同时将stderr附加到名为wget_out.txt
的文件,因此,如果您运行该命令(例如3次),您将获得wget_out.txt
中3次运行的信息