我曾经与另一位经验丰富的程序员合作,他将以下列方式将几乎所有的实用程序调用放在shell脚本中:
FOO=`which foo`
$FOO -bar
与这家伙一起工作超过一年后,我非常清楚他不是那种随心所欲地做这些事情的人,但是在我退出并且我不得不开始维护他的代码之前我从未真正关注过。我唯一的假设是,作为OpenBSD的支持者和非常安全的人,它可能与权限有关,或者能够测试运行脚本的用户是否具有权限?然而,为了解决这个问题,我不记得他曾经测试过设置这些变量的成功。
答案 0 :(得分:1)
使用'其中'这种方式几乎是一种无操作方式,但如果要指定实用程序,则可以更轻松地维护代码。例如,如果你发现自己在某个地方运行了两个已安装的FOO工具,并且其中一个已知有问题,你可以在脚本中硬编码正确的FOO,并且可能将其PATH设置为使用破坏的FOO的用户将不会受伤(或称不安全的FOO)。通过尽早分配值,分配特定值将本地化为一个更改,而不是传播到脚本中的每个实例。
答案 1 :(得分:1)
我会说代码会显着降低,可能不是安全性,而是正确性。假设您希望在路径中找到foo
/usr/bin/foo
,并且该实用程序应该解析某个文件并发出一些文本。所以你将脚本发布到生产中。然后一些用户恰好有一个$HOME/bin/foo
脚本,比如说,启动一个音乐应用程序,这个用户已经将〜/ bin放在/ usr / bin之前的PATH中。现在,对于该用户,您的脚本已损坏。