如何在命令行编写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
}