在NVM README.markdown它說什麼是源代碼的shell函數?
請注意,
which nvm
是行不通的,因爲nvm
是來源於殼 功能,而不是一個可執行二進制文件。
我發現什麼是NVM安裝過程中會更新.bashrc
與
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
不知怎的,這使得提供給外殼的nvm
命令。我的問題是什麼是「源代碼shell函數」,命令nvm執行的是什麼?
在NVM README.markdown它說什麼是源代碼的shell函數?
請注意,
which nvm
是行不通的,因爲nvm
是來源於殼 功能,而不是一個可執行二進制文件。
我發現什麼是NVM安裝過程中會更新.bashrc
與
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
不知怎的,這使得提供給外殼的nvm
命令。我的問題是什麼是「源代碼shell函數」,命令nvm執行的是什麼?
這種言論是草率的。 nvm
只是一個shell函數,通過定義該函數的文件來定義。這不會以任何定性的方式改變函數:如果你手動輸入它,它將是相同的函數,具有所有相同的行爲,所以將「sourced」作爲修飾符應用有點誤導;可以更準確地說nvm.sh
是一個源腳本,它定義了一個名爲nvm
的shell函數。
至於具體的語法:
. somefile
是寫
source somefile
的更便攜的方式......它執行當前shell內somefile
的行動,而不是在一個單獨的shell作爲子進程運行。因此,採購腳本可以修改您當前的解釋器 - 設置變量,更改其工作目錄,以及,定義別名和函數 - 以執行外部程序的方式不能。
澄清:如果你跑bash somefile
,然後通過somefile
定義的任何功能只爲bash
特定副本的持續存在 - 當它退出並返回你的提示,在somefile
定義函數將不更久可用。相比之下,當你source somefile
,因爲somefile
的內容是在你當前的shell實例中執行的,所以這些內容能夠持久化。
謝謝,很好解釋。我確實發現nvm.sh裏面有一個名爲nvm的函數。我不知道你可以將源文件中的函數作爲命令提供給shell。 – user3885927
採購腳本的效果幾乎與手動輸入交互式shell中的每個命令相同。因此,如果可以通過在命令行中鍵入函數來定義函數,則可以通過提供包含其定義的腳本來定義該函數。 –
有道理,感到尷尬它沒有發生在我:( – user3885927
如果你想知道名爲'nvm'的函數的作用,運行'type nvm'來定義它的文本後 –
順便說一句,我假設在我的答案中,你知道shell函數通常是什麼。目前的問題並沒有說明這個假設是否有根據。 –
另外:如果bash特定的,'nvm.sh'是錯誤的,應該改爲'nvm.bash';雖然通常使用'.sh' [在最好的時候相當不幸](https://www.talisman.org/~erlkonig/documents/commandname-extensions-considered-harmful/),當它錯誤地暗示它是完全有害的與其他POSIX shell的兼容性 - ksh,dash,ash等 - 對於沒有通過shebang調用的腳本,不能指定它自己的解釋器。 –