如何从 Github 执行 Bash 脚本?

如何从 Github 执行 Bash 脚本?

假设我my_cool_file.sh在 Git 存储库中有以下文件Github(或者BitBucket事实上,该文件名为my_cool_repo。该文件是用于安装 ConfigServer 著名的 CSF-LFD 软件的脚本:

#!/bin/bash
cd /usr/src
rm -fv csf.tgz
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
sed -i "s/TESTING = "1"/TESTING = "0"/g" /etc/csf/csf.conf
csf -r
perl /usr/local/csf/bin/csftest.pl
# sh /etc/csf/uninstall.sh

如何.sh通过命令行直接从 Github 执行这个 Bash 脚本(文件)?

答案1

使用其确切的 URL加载文件(确保使用原始文件,否则将加载 HTML 页面!)wget,然后将输出传输到bash

以下是一个带有说明的示例:

wget -O - https://raw.githubusercontent.com/<username>/<project>/<branch>/<path>/<file> | bash

来自命令手册wget

   -O file
   --output-document=file
       The documents will not be written to the appropriate files, but all
       will be concatenated together and written to file.  If - is used as
       file, documents will be printed to standard output, disabling link
       conversion.  (Use ./- to print to a file literally named -.)

       Use of -O is not intended to mean simply "use the name file instead
       of the one in the URL;" rather, it is analogous to shell
       redirection: wget -O file http://foo is intended to work like wget
       -O - http://foo > file; file will be truncated immediately, and all
       downloaded content will be written there.

因此,输出到-实际上会将文件内容写入 STDOUT,然后您只需将其传输到bash或您喜欢的任何 shell。如果您的脚本需要sudo权限,您需要sudo bash在最后执行此操作,因此该行变为:

wget -O - https://raw.githubusercontent.com/<username>/<project>/<branch>/<path>/<file> | sudo bash

答案2

如果您的脚本有类似read user_input这样的用户条目:

bash <(curl -shttps://raw.githubusercontent.com/用户名/project/branch/path/file.sh

-s参数不显示下载进度。

答案3

您可以使用以下命令传递参数

bash -s

在这里找到: 执行 curl 获取的脚本时向 bash 传递参数

答案4

如果你希望你的 bash 脚本能够使用管道,请使用bash -c

cat myfile.txt | \
bash -c "$(curl http://example.com/script.sh )" -s arg1 arg2

您还可以使用它wget -O(如@videonauth的回答)

例子用法

#!/usr/bin/env bash

export MYURL="https://raw.githubusercontent.com/sohale/snippets/master/bash-magic/add-date.sh"
curl http://www.google.com | \
bash -c "$(curl -L $MYURL )" -s "       >>>>> next line 

相关内容