Linux 的 shell 提供了很多彈性,讓使用者可以客製化自己的工作環境。但也因此有時候把環境搞亂了自己也沒發現。
例如說:
johnroyer@box:~$ phpunit --version
PHPUnit 7.3.2 by Sebastian Bergmann and contributors.
johnroyer@box:~$ cd devel/laravel/
johnroyer@box:~/devel/laravel$ phpunit --version
PHPUnit 6.5.12 by Sebastian Bergmann and contributors.
這個時候雖然可以使用 which 來找出實際上執行的指令是哪一個 binary,但有時不一定與執行的是同一個。例如,上面的環境中,執行 which 都會有相同的結果:
$ which phpunit
/home/johnroyer/.config/composer/vendor/bin/phpunit
如果使用 type (Bash built-in) 來檢查的話,則會更清楚的告訴你,指令會如何執行,例如:
$ type phpunit
phpunit is a function
phpunit ()
{
REPO_PHPUNIT=`pwd`"/vendor/bin/phpunit";
if [ -e $REPO_PHPUNIT ]; then
$REPO_PHPUNIT $*;
else
/home/johnroyer/.config/composer/vendor/bin/phpunit $*;
fi
}
which 是由 $PATH 環境變數中的路徑來找出對應的執行擋路徑;type 則是由 Bash 當下的環境去檢查當下到底會如何執行。