假设我的 Bash 有一些广泛的~/.bashrc
自定义功能,不仅可以帮助我交互使用,还可以帮助我编写脚本(别名、函数、变量等)。我希望我的所有脚本都可以使用此功能,因此我正在考虑设置BASH_ENV
为~/.bashrc
(这似乎是做到这一点的方法。)
我的问题是,这有什么问题吗?
- 一个问题是我使用的任何第三方 shell 脚本都可能与我的
~/.bashrc
. 但我认为这是一个可以管理的问题,因为无论如何我都会在使用它们之前对其进行审查(或者盲目地相信像 Github 明星这样深奥的统计数据来认为它们是安全的),并且只是偶尔降低自己的水平来取消任何可能行为不当的脚本BASH_ENV
。 - 另一个问题是速度,但说实话,我的
~/.bashrc
并没有那么重,如果我想要速度,我就不会使用 shell 脚本。 - 另一个问题是安全。但如果我运行一个具有某种 setuid 或特权状态的恶意脚本,我已经过着 YOLO 的生活方式了,而我的生活
~/.bashrc
只会成为我彻底 ganking 的主菜中的温和调味品。 - 另一个问题是,从纯粹主义者的角度来看,最好将我的
~/.bashrc
文件分成两个文件,一个用于交互式使用,一个用于脚本编写,并且可能将其设置为交互式文件是脚本文件的超集。但除了那种模糊的纯洁感之外,这听起来似乎是付出了太多的努力却收获太少。 - 另一个问题是可移植性,但我主要为自己编写脚本。如果我以后想与其他人分享,那么概括起来就不那么困难了。如果情况变得更糟,我总是可以编写一个脚本来自动内联
~/.bashrc
我正在使用的任何功能。这听起来不像是一个 NP 问题。 - 也可以说我的方法是有缺陷的,因为任何可能受益于 my 的非标准功能的脚本都
~/.bashrc
表明这样的脚本应该首先用另一种语言编写。 - 另一方面,Unix/Linux 哲学不仅仅是一套标准,而且是一套根据您的需求定制环境的工具,所以为什么不呢。
IMO,不,这不是一个好主意。
您最好
expand_aliases
在使用它的每个脚本的顶部显式获取函数和变量库(别名在非交互式 shell 中不起作用,除非设置了 shell 选项) - 这样您就不会冒破坏的风险(大声地、明显地,或者更糟的是,巧妙地)系统上数百或数千个现有脚本中的任何一个。然而,一如既往,最终的规则是:这是你的系统,如果你愿意,你可以破坏它。