我正在编写一个半实时bash脚本,它的运行速度不够快。根据我的理解,Bash引用某种表来查找您提供它的命令的完整路径。指定完整路径会显着加快循环中运行的命令吗?
答案 0 :(得分:6)
不太可能。 <{1}} shell实际上会缓存它找到的可执行文件,因此只有第一次搜索会很慢。
来自bash
联机帮助页:
如果名称既不是shell函数也不是内置函数,并且不包含斜杠,则bash会在PATH的每个元素中搜索包含该名称的可执行文件的目录。 Bash使用哈希表来记住可执行文件的完整路径名(请参阅下面的SHELL BUILTIN命令下的哈希)。只有在哈希表中找不到该命令时,才会执行PATH中目录的完整搜索。
加速bash
脚本通常采取两种形式:
bash
或cut
);和作为第一个例子,用:
提取字符串的第一个字符sed
是一个可怕的想法,因为它必须产生进程来完成工作。您可以使用以下内容快速在firstchar=$(echo $string | cut -c1-1)
中执行完全相同的操作:
bash
没有产生子流程的相对巨大的成本。
第二点是确保在运行子流程时为工作选择最佳工具。例如,如果可以使用非常简单的firstchar=${string:0:1}
单行,则不要使用多个grep
,cut
和sed
命令的大量管道。
答案 1 :(得分:0)
除了关于优化bash
脚本的说法外,另一种选择不是使用bash
,而是使用更轻量级的shell(例如sh
):{{1} }很大,并且启动时间相对较长。如果脚本的执行时间很短,则实际上可以由bash
启动来控制。