在一行命令中使用wget下载并运行/删除bash脚本

12
wget http://sitehere.com/install.sh -v -O install.sh; rm -rf install.sh

这会在下载后运行脚本,然后将其删除吗?

4个回答

61

我喜欢将其管道传输到sh。不需要在本地创建和删除文件。

wget http://sitehere.com/install.sh -O - | sh


请问为什么需要将第二个“-”管道到bash中? - Maziyar
与其他答案相比,这个实际上是有效的,它在下载后运行安装程序。 - tmarois

11

我认为您可能需要实际执行它:

wget http://sitehere.com/install.sh -v -O install.sh; ./install.sh; rm -rf install.sh

另外,如果你想要更强的鲁棒性,可以使用&&来分隔命令,这样只有在前一个命令成功执行后才会尝试执行下一个命令:

wget http://sitehere.com/install.sh -v -O install.sh && ./install.sh; rm -rf install.sh

谢谢。我也需要执行chmod u+x,但我已经搞定了。你也不需要-O。 - amanada.williams

1

我认为这是最好的方法:

wget -Nnv http://sitehere.com/install.sh && bash install.sh; rm -f install.sh

说明:

  • -N--timestamping 只会在服务器上有更新时才下载该文件
  • -nv--no-verbose 最小化输出,或者使用 -q / --quiet 完全没有 "wget" 的输出
  • && 只有当第一个命令成功执行时才会执行第二个命令
  • 使用 bash (或 sh) 执行脚本,假设它是一个脚本 (或 shell 脚本); 不需要 chmod +x
  • rm -f (或 --force) 无论发生什么情况都会删除该文件 (即使它不存在)
  • 在这种情况下不需要使用 wget-O 选项。除非您想使用与 install.sh 不同的临时文件名,否则它是多余的

这是多余的,除非……什么? - Torben Gundtofte-Bruun
是的,我知道这已经8年了。令我感到惊讶的是,在所有这些时间里,没有人指出这里的-N是无关紧要的,因为他们使用的命令每次都会删除本地副本。 - fred

0
你在第一条语句中进行下载,在最后一条语句中进行删除。 你需要添加一行代码来执行该文件,即添加:

./install.sh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接