编写Bash脚本,根据命令中的参数数量下载可变数量的.gitignore文件



如何在命令行编写gitignore Python并让它运行

curl https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore > ./.gitignore

并让gitignore Python macOS进行

curl https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore https://raw.githubusercontent.com/github/gitignore/master/macOS.gitignore > ./.gitignore

gitignore之后的参数数量是可变的。

tl;博士:转到底部

听起来你想写一个bash函数来循环参数并将输出写入.gitignore。这里有三个概念:循环迭代、变量扩展和stdout重定向。

首先,您需要一个函数体,它是用funcname() { ...; }创建的(如果您将端括号拆分为自己的行,则;是可选的(。

其次,您需要对传递给该函数的参数进行迭代。$@是bash中的一个特殊变量,它被设置为给定脚本/函数中所有未移位的参数。要对此进行循环,可以使用for循环构造:for i in "${@}"@周围的花括号是可选的,但需要引号,因为您不想将funcname "a" "b c"扩展为三个循环迭代。要了解更多信息,请查看IFS拆分。

第三,您希望在一个url的中间扩展您的新变量i。确保它是双重报价:

for i in "${@}"; do
curl "https://raw.githubusercontent.com/github/gitignore/master/${i}.gitignore"
done

最后,您希望将所有这些写入一个文件.gitignore。在curl命令的末尾添加>.gitignore听起来可能很直观,但实际上,您希望将其放在done之后。这是因为像funcname Python macOS这样的调用将运行:

curl "https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore" >.gitignore
curl "https://raw.githubusercontent.com/github/gitignore/master/macOS.gitignore" >.gitignore

>重定向操作符将用python的内容覆盖gitignore,然后用macOS的内容再次覆盖它。您确实希望捕获这两个命令的stdout并用它们的内容覆盖.gitignore(或者,您可以使用>>执行上述操作,但多次运行命令会导致.gitigner中出现重复行(。

所以你的最终功能是:

gitignore() {
for i in "${@}"; do
curl "https://raw.githubusercontent.com/github/gitignore/master/${i}.gitignore"
done >.gitignore
}

最新更新