如何打包 shell 脚本以在 GitHub 上分发?

How do I package a shell script for distribution over GitHub?

我不太确定从哪里开始搜索这个问题的答案。

(我正在使用 Mac。)

无论如何,我制作了一个命令行工具 运行 一些 Ruby 东西。基本上,我将一个可执行文件添加到我的用户目录中的一个文件夹中,添加了权限以让它在终端中 运行。然后,我将可执行文件的路径添加到我的 $PATH 变量中。这一切对我来说都很好。我可以从我的 shell:

中像这样 运行
$ ngi controller

我把项目上传到GitHub,我已经给了用户下载和使用的说明,就像我一样,但是下载说明非常复杂(这是我能想到的最好的与):

~ $ mkdir .angular_init
~ $ cd .angular_init
~/.angular_init $ git clone https://github.com/joshbeam/angular_init.git
~/.angular_init $ cd angular_init/bin
~/.angular_init/angular_init/bin $ chmod 755 ngi
~/.angular_init/angular_init/bin $ export PATH=$PATH:~/.angular_init/angular_init/bin

显然,对于像 rvmnpm 这样的工具,您只需神奇地下载它们,然后它们就可以正常工作了。 那么我怎样才能将我的 shell 脚本打包成简单的 "downloadable",并为用户节省 6 shell 行的(令人困惑的)工作量?

(如果有帮助,这里是 link to the repo)。

作为一些简化点,您不需要双重嵌套目录,如您所知,git clone 将创建它需要的目录。

所以

git clone https://github.com/joshbeam/angular_init.git .angular_init

将创建您的存储库并将其直接克隆到 .angular_init

您还可以告诉 git 该文件在存储库中具有执行权限,因此它会以这种方式签出,而不需要人们自己 chmod 它。只需更改权限并再次添加文件,然后提交即可。 (您可以在您的工作目录中使用 git ls-tree HEAD -- <file> 来查看 git 具有的权限。)

这仅用 git 克隆替换了前五个步骤。只剩下两个完全合理的步骤。

此外,第二步应该是将那种 PATH 修改行放入适当的 shell 启动文件而不是 运行 直接放在当前 shell 会话。

或者,上面让你做的是让人们将存储库签出到他们想要的任何地方,然后 link 从那里直接到他们 PATH 中已经存在的位置。