我们可以 运行 来自 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 ...
我处于初级水平。我不确定这是否可行。我在 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 ...