Bash

如何知道 shell 變數和函式設置在哪裡?

  • May 17, 2017

當我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似乎也與完成有關,這裡有一個包含它的腳本

引用自:https://unix.stackexchange.com/questions/365109