在fish
中,是否可以在另一個同名函數內引用或使用函數?例如,fish
有一個功能ls
在/usr/local/share/functions/ls.fish
,它設置一些默認參數的基礎上,如操作系統和外殼是否有顏色。我想定義另一個函數,它會爲我設置一些默認顏色,而不會破壞這個其他函數,以防我想使用更新版本的fish
。函數路徑中使用函數前面的函數
設置別名最簡單的方法似乎是使用command
,像這樣:
function ls
command ls -F $argv
end
文件ls.fish
在文件夾~/.config/fish/functions
英寸這是用戶定義函數的默認文件夾。這個文件夾和~/.config/fish/functions
都在$fish_function_path
中,但~/.config/fish/functions
後來出現,因此用戶可以設置自己的功能,覆蓋fish
的默認功能。然而,隨着fish
文件說,
command forces the shell to execute the program COMMANDNAME and ignore
any functions or builtins with the same name.
如何重寫一個後來在$fish_function_path
定義的別名/功能,無需過度寫呢?理想情況下,解決方案也會使用相同名稱的內置命令,如cd
,根據所引用的文檔也是不可能的,但這不是必需的。
最後,這是一個好主意嗎?如果fish
默認不這樣做,那肯定是有原因的吧?
爲什麼會導致無限循環?在'/ usr/local/share/fish/functions/ls.fish'文件後面調用'〜/ .config/fish/functions/ls.fish'文件,對嗎?或者它們同時被調用,並且前一個文件中定義的函數會覆蓋後一個文件中的函數,但是在運行該命令時同時調用這兩個函數? – trysis
它僅通過搜索'$ fish_function_path'找到第一個'ls.fish'。所以'〜/ .config'中的那個會掩蓋'/ usr/local/share'中的那個。它導致無限循環的原因是執行'ls.fish'首先試圖複製'ls',這意味着自動加載'ls',這意味着執行'ls.fish' ... –
明白了,謝謝。這可能是放在文檔中的信息,假設它不在那裏,我是盲目的,沒有看到它。 – trysis