Bash
如何知道 shell 變數和函式設置在哪裡?
當我
set
在我的系統中輸入命令時,我得到了這個提取:__colormgr_commandlist=' create-device create-profile delete-device delete-profile device-add-profile device-get-default-profile device-get-profile-for-qualifier device-inhibit device-make-profile-default device-set-kind device-set-model device-set-serial device-set-vendor find-device find-device-by-property find-profile find-profile-by-filename get-devices get-devices-by-kind get-profiles get-sensor-reading get-sensors get-standard-space profile-set-filename profile-set-qualifier sensor-lock sensor-set-options ' __grub_script_check_program=grub-script-check _backup_glob='@(#*#|*@(~|.@(bak|orig|rej|swp|dpkg*|rpm@(orig|new|save))))' _xspecs=([freeamp]="!*.@(mp3|ogg|pls|m3u)" [cdiff]="!*.@(dif?(f)|?(d)patch)?(.@([gx]z|bz2|lzma))" [bibtex]="!*.aux" [rgview]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [oowriter]="!*.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm)" [chromium-browser]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [tex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [netscape]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" .../.. _xinetd_services () { local xinetddir=/etc/xinetd.d; if [[ -d $xinetddir ]]; then local restore_nullglob=$(shopt -p nullglob); shopt -s nullglob; local -a svcs=($( printf '%s\n' $xinetddir/!($_backup_glob) )); $restore_nullglob; COMPREPLY+=($( compgen -W '${svcs[@]#$xinetddir/}' -- "$cur" )); fi } dequote () { eval printf %s "$1" 2> /dev/null } quote () { local quoted=${1//\'/\'\\\'\'}; printf "'%s'" "$quoted" } quote_readline () { local quoted; _quote_readline_by_ref "$1" ret; printf %s "$ret" }
我檢查了我所知道的所有文件,如
/etc/profile
、/etc/environment
和/或~/.bashrc
。我沒有找到任何生成腳本或程式碼呼叫。你有什麼建議來自哪裡?
對於這些函式,Bash 可以告訴你它們來自哪裡:
$ help declare ... -F restrict display to function names only (plus line number and source file when debugging) $ shopt -s extdebug $ declare -F quote_readline quote_readline 150 /usr/share/bash-completion/bash_completion
(我在 stackoverflow 的答案中發現了這一點。)
對於環境變數,有很多很好的方法可以在這裡找到它們:如何確定環境變數的來源
大多數這些功能似乎與命令行完成有關,我的 Ubuntu 系統
/usr/share/bash-completion/
如上所示。FWIW,
__colormgr_commandlist
似乎也與完成有關,這裡有一個包含它的腳本。