我们可以 运行 来自 repo 的 bash 脚本吗?

Can we run a bash script from a repo?

我处于初级水平。我不确定这是否可行。我在 bitbucket repo 上有一个 bash 脚本,它执行某种设置。对于 运行 那个 bash 脚本,我必须在本地下载那个脚本和 运行 .sh 文件。有什么方法可以 运行 通过 bitbucket repo 脚本而不下载?

您将始终需要下载文件(即:从服务器检索文件),但您可以生成一个管道以将检索和执行合二为一。最简单的是:

curl ${url} | bash

您需要找到显示原始文件的 URL(而不是 HTML 网页)。对于 BitBucket,这将如下所示。您可以用 ${commit_id} 代替分支或标签名称。

https://bitbucket.org/${user}/${repo}/raw/${commit_id}/${file}

但是请注意,从安全的角度来看,这通常会引起注意,特别是如果通过 HTTP(而不是 HTTPS)检索文件,因为您的计算机上基本上 运行 未知代码。在此管道中使用 sudo 更令人担忧。

用户需要准备好信任存储库中存储的任何内容,因此请确保您只允许受信任的用户推送(或合并),并确保您仔细检查对相关文件的更改。


您还应该知道,当 运行 像这样的脚本(对于 bash ${file}bash < ${file} 而言同样如此)时,shebang 将不会被尊重 - 它会只是被视为评论而被忽略。

例如,如果您的脚本开始如下(-e 出错时退出,-u 将未定义的变量作为错误处理),则不会设置这些标志。

#!/bin/bash -eu

# ... body of script ...

当直接“执行”文件时(即:chmod +x ./my_script.sh./my_script.sh),内核处理shebang并调用/bin/bash -eu ...但是当通过上述方法之一执行脚本时,bash 调用在管道中。

相反,最好在脚本主体中设置这些标志,这样执行方法就无关紧要了:

#!/bin/bash

set -eu

# ... body of script ...