shell 在bash脚本中使用Linux命令的正确方法

utugiqy6  于 2023-04-21  发布在  Shell
关注(0)|答案(3)|浏览(179)

在bash脚本中使用Linux命令的最佳和最正确的方法是什么?
只使用ip addr show,依赖于shell路径($PATH),是正确的吗?还是应该先找到命令的路径(像whereis ipcommand -v ip),将输出分配给某个变量,然后使用它?

00jrzges

00jrzges1#

就我个人而言,我只是依赖于PATH并调用“裸”命令。
如果您不信任用户的PATH,可以将其重置为最小默认值:

PATH=$(/usr/bin/getconf PATH)

grep "$pattern" "$file"
6ie5vjzr

6ie5vjzr2#

老问题了,具体来说,它实际上不能完全回答,因为我们不知道脚本何时运行的环境。因此:

# early pipe for smoke testing required commands
hash test for false promises || exit 1

只需在脚本中按名称排列您需要的重要的非标准命令,如果没有找到,哈希将告诉:

hash: no such command: for
hash: no such command: promises

理由:在中途卡住之前,提前退出脚本失败,浪费您宝贵的时间,并可能使系统上的事务在中途打开和未完成,而是将操作引导回可以控制运行时环境的用户(fail-fast 1)。
这与the accepted answer很好地结合在一起,因为您可以使用该答案来消除副作用(并由系统管理员进行授权配置),但John Kugelman后来评论说 *“使用普通命令,不要担心$PATH”*2的评论可能更好
失败早,失败多,但总是失败向前。

  • 约翰·C·麦克斯韦 *

1.快速故障,https://en.wikipedia.org/wiki/Fail-fast
1.我希望我有时间写一个详细的答案。克利夫笔记:**使用纯命令,不用担心$PATH。**在变量中存储绝对命令路径是常见的反模式。$PATH是由用户控制的,所以如果设置不正确,那是他们自己的错。他们不能通过改变它来利用它;毕竟,他们总是可以手动运行脚本的命令;或者只是编辑脚本然后运行它。你只需要在提升权限时小心使用$PATH。例如,你会看到susudo有防止漏洞利用的保护措施。

blmhpbnm

blmhpbnm3#

我倾向于在路径的顶部设置实用程序的路径,避免对PATH的任何依赖。一种潜在的攻击是在运行bash脚本之前设置PATH。为每个实用程序设置路径是痛苦的,但它可以防止这种攻击。
如果您正在为多个环境进行创作,其中实用程序位于不同的位置,例如Debian和MacOS,我会检查路径,例如。

[ -f /usr/bin/grep ] && GREP=/usr/bin/grep || GREP=/bin/grep

相关问题