我正在尝试编写一个bash脚本来完成一项任务,到目前为止我已经做得很好,并且在某种程度上让它工作,但我想设置它以便它可以分发给其他人,并且将会打开它是开源的,所以我想以“常规”的方式开始做事。不幸的是,我并不确定传统方式是什么。
理想情况下,我想要一个深入在线资源的链接,深入讨论这个和周围的主题,但我很难找到可以在google上找到它的关键字。
在我的脚本开始时,我设置了一堆全局变量来存储它将要访问的dirs的名称,这意味着我可以快速修改dir,但这是编程快捷方式,而不是用户快捷方式,I无法告诉用户他们必须摆弄这些东西。此外,我需要个人用户的设置,以免在每次升级时被删除。
问题:
设置文件夹的名称:〜/ .foo / - 这很好,但如何保持我的工作副本和我的开发副本分开?在dev版本的源代码中调整引用?
如果我的程序需要维护和更新数据库(在这种情况下是gps tracklog数据)这个目录应该在哪里?用户需要访问其中一些数据,但主要供内部使用。我个人在cygwin工作,我喜欢将这些数据保存在单独的驱动器上,所以路径很奇怪,我怀疑很多用户都能找到这个。默认情况下,我正在考虑〜/ gpsdata / - 这是正常的,还是应该硬编码一个系统,要求用户在第一次运行时放置它,并将其存储在设置文件夹中?无论发生什么,我都不得不将目录引用存储在设置文件夹中的文件中。
程序需要一个数据“收件箱”,这是用户可以转储文件的文件夹,然后运行脚本来处理这些文件。我在想〜/ gpsdata / in / ??虽然总会有一个选项将文件或文件夹添加到命令行以便使用它(它处理了列出的所有位置的文件,包括“收件箱”)
剧本自己应该去哪里?它已经足够智能,它可以创建它的所有辅助/设置文件(一旦我弄清楚“正确的”目录)如果运行“./foo --setup”我可以把它推到/ usr / bin /或/ bin或〜/ .foo / bin(并将其添加到路径)什么是正常的?
我需要存储它将连接到的Web服务的登录详细信息(如果重要的话,使用curl -u)计划包含一个设置,每次执行时都要求输入用户名和密码,但它目前存储平面文本在〜/ .foo /中的文件中 - 我知道,这不好。 web服务(osm.org)确实支持oauth,但我不知道如何让curl使用它 - 首先让卷曲与服务对话是一个黑客攻击。有没有一种简单的方法可以对这样的文件进行真正的基本加密,以阻止带有记事本的白痴?
对于问题列表感到抱歉,我相信它们与单个帖子密切相关。这是所有刺伤的东西,但想要澄清/确认。
答案 0 :(得分:1)
设置文件夹的名称:〜/ .foo / - 这很好,但如何保持我的工作副本和我的开发副本分开?
默认值为~/.foo
,以及可用于在开发时覆盖默认值的选项(例如--config-directory
)。
如果我的程序需要维护和更新数据库(在这种情况下是gps tracklog数据)这个目录应该在哪里?
如果您的脚本在普通用户帐户下运行,则必须位于用户主目录中的某个位置;在其他地方,你将没有写权限。也许是~/.foo/tracklog
或其他什么?同样,添加一个命令行选项,以及配置文件中的一个选项,以覆盖它。
我不是你~/gpsdata
默认的粉丝;我不希望我的主目录混杂着未经我同意而创建的程序的各种目录。你在Windows上看到这种情况发生了很多,这真的很烦人。 (保存在我的文档中的游戏?离开这里!)
程序需要一个数据“收件箱”,这是用户可以转储文件的文件夹,然后运行脚本来处理这些文件。我在想〜/ gpsdata / in /?
如上所述,我更喜欢~/.foo/inbox
。还有命令行选项和配置文件选项来更改它。
但你真的需要一个收件箱吗?如果用户需要在某些文件上手动运行脚本,那么最好只在命令行上接受这些文件名。它们可以在任何地方进行处理,而无需将它们移动到“神奇”的位置。
脚本应该自己去哪里?
这通常取决于您运行的特定操作系统的打包系统。从源代码安装时,/usr/local/bin
是一个明智的默认设置,不会干扰包管理器。
是否有一种简单的方法可以对这样的文件进行真正的基本加密,以阻止带有记事本的白痴?
是的,有。但最好不要这样做,因为它会造成虚假的安全感。没有主密码或其他东西,安全存储是不可能的!例如,Pidgin以明文形式明确地存储密码,因此用户不会对其“安全”存储的密码做出任何错误的假设。所以最好只以纯文本形式存储它们,如果文件是世界可读的则抱怨,并在手册中添加一个清晰的注释,以警告用户发生了什么。
底线:不要试图重新发明轮子。有成千上万的脚本和程序面临同样的问题;他们中的大多数最终采用了相同的惯例,并且有充分的理由。看看他们做了什么,模仿他们而不是重新发明轮子。
答案 1 :(得分:1)
您可以从Filesystem Hierarchy Standard开始。我不确定它的效果如何,但确实提供了一些指导。一般来说,我尝试使用以下内容:
$HOME/.foo/
用于特定于用户的设置 - 隐藏$PREFIX/etc/foo/
用于系统范围的配置$PREFIX/foo/bin/
适用于系统范围的二进制文件
$PREFIX/foo/bin
的$PREFIX/bin/
以便于使用$PREFIX/foo/var/
是变量数据存在的位置 - 这是您的输入假脱机和日志文件将存在的位置 $PREFIX
应默认为/opt/foo
,即使默认情况下几乎每个人都会在/usr/local
中填充内容(感谢GNU!)。如果有人想在其主目录中安装该软件包,请将$HOME
替换为$PREFIX
。至少这是我对如何工作的看法。