Shell
為什麼我不能將一個命令的路徑名輸出重定向到“cd”?
我正在嘗試
cd
接受從另一個命令重定向到它的目錄名稱。這些方法都不起作用:$ echo $HOME | cd $ echo $HOME | xargs cd
這確實有效:
$ cd $(echo $HOME)
為什麼第一組命令不起作用,還有其他命令也以這種方式失敗?
cd
不是外部命令 - 它是 shell 內置函式。它在目前 shell 的上下文中執行,而不是像外部命令那樣,在 fork/exec 的上下文中作為單獨的程序執行。您的第三個範例有效,因為外殼程序在呼叫
cd
內置函式之前擴展了變數和命令替換,因此cd
接收值${HOME}
作為其參數。POSIX 系統確實有一個二進製文件
cd
——在我的 FreeBSD 機器上,它位於/usr/bin/cd
,但它並沒有按照你的想法做。呼叫二進製文件cd
會導致 shell 派生/執行二進製文件,這確實將其工作目錄更改為您傳遞的名稱。但是,一旦這樣做,二進製文件就會退出,並且分叉/執行的程序消失,將您返回到您的 shell,它仍然在您開始之前所在的目錄中。