为什么建议使用 env 调用 stat?

为什么建议使用 env 调用 stat?

coreutils手册,关于stat命令

由于 shell 别名和内置函数的存在,以交互方式或在脚本中stat使用原始函数 可能会获得与此处描述的功能不同的功能。通过(即)stat调用它以避免来自 shell 的干扰。envenv stat ...

  1. “shell 别名和内置stat函数”是什么意思?在 bash 中,我没有找到名为的别名或内置函数或函数stat

    $ whereis stat
    stat: /usr/bin/stat /usr/bin/X11/stat /usr/share/man/man1/stat.1.gz /usr/share/man/man2/stat.2.gz
    $ help stat
    bash: help: no help topics match `stat'.  Try `help help' or `man -k stat' or `info stat'.
    
  2. 为什么“Invoke it via env(ie, env stat ...)”可以“避免shell的干扰”?

    后面的命令不能env是别名、内置命令或函数吗?

    放在env命令前面是否可以指定该命令是外部可执行文件?

答案1

  1. Bash 可能没有stat内置的,但其他 shell 可能有。事实上,shell 可以提供它想要的任何实用程序的内置版本,并且用户可以stat使用自己的 shell 函数或调用另一个二进制文件的别名进行覆盖。

  2. 不可以。执行的实用程序env不能是内置的(cd例如尝试一下)。同样不允许使用别名和 shell 函数。

该手册只是试图确保用户获得所描述的功能。在我看来,如果它真的想变得偏执,它还应该提到您理想情况下应该stat使用其绝对路径进行调用。这在非 Linux 系统上更有意义,其中 GNU coreutils 是可选的额外组件(通常安装在/usr/local/gnu/bin或类似的位置,或带有g前缀,例如gstatglsgmv

相关内容