Coreutils

為什麼建議使用 env 呼叫 stat?

  • December 30, 2016

來自coreutils 手冊,關於stat命令

由於 shell 別名和內置stat函式,以 stat互動方式或在腳本中使用未經修飾的函式可能會獲得與此處描述的不同的功能。env通過(ie, )呼叫它env stat ...以避免來自 shell 的干擾。

  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'.
  1. 為什麼可以“通過env(即env stat ...)呼叫它”“避免來自shell的干擾”?

後面的命令env不能是別名、內置命令或函式嗎?

在命令前面是否env可以指定該命令是外部執行檔?

  1. Bash 可能沒有stat內置的,但其他 shell 可能。事實上,shell 可以提供它想要的任何實用程序的內置版本,並且使用者可以stat使用他們自己的 shell 函式或呼叫另一個二進製文件的別名來覆蓋。
  2. 不可以。執行的實用程序env不能是內置的(cd例如嘗試一下)。同樣不允許使用別名和 shell 函式。

該手冊只是試圖確保使用者獲得所描述的功能。在我看來,如果它想要真正的偏執,它還應該提到理想情況下你應該stat用它的絕對路徑呼叫。這在 GNU coreutils 是可選的額外的非 Linux 系統上更有意義(通常安裝在/usr/local/gnu/bin或某個這樣的地方,或帶有g前綴,例如gstatglsgmv

引用自:https://unix.stackexchange.com/questions/333712