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

Tim*_*Tim -3 coreutils stat

来自coreutils 手册,关于stat命令

由于 shell 别名和内置stat函数,以stat交互方式或在脚本中使用未修饰的 函数可能会获得与此处描述的功能不同的功能。通过env(即env 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'.
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为什么“通过env(即env stat ...)调用它”可以“避免来自shell的干扰”?

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

    放在env命令前面是一种指定命令是外部可执行文件的方法吗?

Kus*_*nda 5

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

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

该手册只是试图确保用户获得所描述的功能。在我看来,如果它真的想变得偏执,还应该提到你理想情况下应该stat用它的绝对路径调用。这使得在那里的GNU的coreutils是一个可选的额外的(通常安装在非Linux系统更有意义,/usr/local/gnu/bin或诸如此类的地方,或用g前缀,例如gstatglsgmv等)