Advertisement
Guest User

Bash logfile

a guest
Dec 1st, 2013
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 45.21 KB | None | 0 0
  1. BASH=/usr/bin/bash
  2. BASHOPTS=cmdhist:expand_aliases:extglob:extquote:force_fignore:interactive_comments:progcomp:promptvars:sourcepath
  3. BASH_ALIASES=()
  4. BASH_ARGC=()
  5. BASH_ARGV=()
  6. BASH_CMDS=()
  7. BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
  8. BASH_LINENO=()
  9. BASH_SOURCE=()
  10. BASH_VERSINFO=([0]="4" [1]="2" [2]="45" [3]="2" [4]="release" [5]="x86_64-unknown-linux-gnu")
  11. BASH_VERSION='4.2.45(2)-release'
  12. COLORTERM=gnome-terminal
  13. COLUMNS=80
  14. DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-8gqz26EkqB,guid=f7fe523d90b7c9af06579150529c35c1
  15. DESKTOP_SESSION=gnome
  16. DIRSTACK=()
  17. DISPLAY=:0
  18. EUID=1000
  19. GDMSESSION=gnome
  20. GDM_LANG=en_GB.utf8
  21. GJS_DEBUG_OUTPUT=stderr
  22. GJS_DEBUG_TOPICS='JS ERROR;JS LOG'
  23. GNOME_DESKTOP_SESSION_ID=this-is-deprecated
  24. GNOME_KEYRING_CONTROL=/run/user/1000/keyring-RAj8Xt
  25. GNOME_KEYRING_PID=428
  26. GPG_AGENT_INFO=/run/user/1000/keyring-RAj8Xt/gpg:0:1
  27. GROUPS=()
  28. HISTFILE=/home/kelevra/.bash_history
  29. HISTFILESIZE=500
  30. HISTSIZE=500
  31. HOME=/home/kelevra
  32. HOSTNAME=Archbox
  33. HOSTTYPE=x86_64
  34. IFS=$' \t\n'
  35. LANG=en_GB.utf8
  36. LC_MEASUREMENT=fi_FI.utf8
  37. LC_MONETARY=fi_FI.utf8
  38. LC_NUMERIC=fi_FI.utf8
  39. LC_PAPER=fi_FI.utf8
  40. LC_TIME=fi_FI.utf8
  41. LINES=24
  42. LOGNAME=kelevra
  43. MACHTYPE=x86_64-unknown-linux-gnu
  44. MAIL=/var/spool/mail/kelevra
  45. MAILCHECK=60
  46. MOZ_PLUGIN_PATH=/usr/lib/mozilla/plugins
  47. OPTERR=1
  48. OPTIND=1
  49. OSTYPE=linux-gnu
  50. PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/core_perl
  51. PIPESTATUS=([0]="0")
  52. PPID=756
  53. PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
  54. PS1='[\u@\h \W]\$ '
  55. PS2='> '
  56. PS3='> '
  57. PS4='+ '
  58. PWD=/home/kelevra
  59. QT_IM_MODULE=ibus
  60. SESSION_MANAGER=local/Archbox:@/tmp/.ICE-unix/432,unix/Archbox:/tmp/.ICE-unix/432
  61. SHELL=/bin/bash
  62. SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
  63. SHLVL=1
  64. SSH_AGENT_PID=450
  65. SSH_AUTH_SOCK=/run/user/1000/keyring-RAj8Xt/ssh
  66. TERM=xterm
  67. UID=1000
  68. USER=kelevra
  69. USERNAME=kelevra
  70. VTE_VERSION=3409
  71. WINDOWID=25165834
  72. WINDOWPATH=1
  73. XAUTHORITY=/var/run/gdm/auth-for-kelevra-ON1dst/database
  74. XDG_MENU_PREFIX=gnome-
  75. XDG_RUNTIME_DIR=/run/user/1000
  76. XDG_SEAT=seat0
  77. XDG_SESSION_ID=1
  78. XDG_VTNR=1
  79. XMODIFIERS=@im=ibus
  80. _=set
  81. _backup_glob='@(#*#|*@(~|.@(bak|orig|rej|swp|dpkg*|rpm@(orig|new|save))))'
  82. _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)" [zathura]="!*.@(cb[rz7t]|djv?(u)|?(e)ps|pdf)" [netscape]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [acroread]="!*.[pf]df" [makeinfo]="!*.texi*" [kwrite]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [gview]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [qiv]="!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|svg)" [lrunzip]="!*.lrz" [bzcat]="!*.?(t)bz?(2)" [amaya]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [pdftex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [hbpp]="!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])" [rpm2cpio]="!*.[rs]pm" [view]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [unxz]="!*.@(?(t)xz|tlz|lzma)" [ly2dvi]="!*.ly" [mozilla]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [modplugplay]="!*.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|okta|p[st]m|s[3t]m|ult|umx|wav|xm)" [lzgrep]="!*.@(tlz|lzma)" [pyflakes]="!*.py" [dillo]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [aaxine]="!*@(.@(mp?(e)g|MP?(E)G|wma|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|wmv|mp[234]|MP[234]|m4[pv]|M4[PV]|mkv|MKV|og[gmv]|OG[GMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.part)" [dvipdfmx]="!*.dvi" [advi]="!*.dvi" [ggv]="!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))" [lzmore]="!*.@(tlz|lzma)" [lzless]="!*.@(tlz|lzma)" [kdvi]="!*.@(dvi|DVI)?(.@(gz|Z|bz2))" [poedit]="!*.po" [firefox]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [gv]="!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))" [madplay]="!*.mp3" [lbzcat]="!*.?(t)bz?(2)" [lilypond]="!*.ly" [gtranslator]="!*.po" [jadetex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [sxemacs]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [epdfview]="!*.pdf" [gpdf]="!*.[pf]df" [kghostview]="!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))" [pbzcat]="!*.?(t)bz?(2)" [texi2dvi]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [ps2pdf12]="!*.@(?(e)ps|pdf)" [ee]="!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)" [lzcat]="!*.@(tlz|lzma)" [lbunzip2]="!*.?(t)bz?(2)" [ps2pdf13]="!*.@(?(e)ps|pdf)" [vim]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [ps2pdf14]="!*.@(?(e)ps|pdf)" [dvips]="!*.dvi" [lzfgrep]="!*.@(tlz|lzma)" [hbrun]="!*.[Hh][Rr][Bb]" [kbabel]="!*.po" [rview]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [kaffeine]="!*@(.@(mp?(e)g|MP?(E)G|wma|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|wmv|mp[234]|MP[234]|m4[pv]|M4[PV]|mkv|MKV|og[gmv]|OG[GMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.part)" [xv]="!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|?(e)ps)" [rgvim]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [dvitype]="!*.dvi" [oodraw]="!*.@(sxd|std|sda|sdd|?(f)odg|otg)" [elinks]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [playmidi]="!*.@(mid?(i)|cmf)" [realplay]="!*.@(rm?(j)|ra?(m)|smi?(l))" [xine]="!*@(.@(mp?(e)g|MP?(E)G|wma|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|wmv|mp[234]|MP[234]|m4[pv]|M4[PV]|mkv|MKV|og[gmv]|OG[GMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.part)" [xpdf]="!*.[pf]df" [gqmpeg]="!*.@(mp3|ogg|pls|m3u)" [lzegrep]="!*.@(tlz|lzma)" [aviplay]="!*.@(avi|asf|wmv)" [latex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [rvim]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [bunzip2]="!*.?(t)bz?(2)" [ogg123]="!*.@(ogg|m3u|flac|spx)" [ps2pdfwr]="!*.@(?(e)ps|pdf)" [znew]="*.Z" [harbour]="!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])" [lokalize]="!*.po" [kate]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [xemacs]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [dragon]="!*@(.@(mp?(e)g|MP?(E)G|wma|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|wmv|mp[234]|MP[234]|m4[pv]|M4[PV]|mkv|MKV|og[gmv]|OG[GMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM|iso|ISO)|+([0-9]).@(vdr|VDR))?(.part)" [unlzma]="!*.@(tlz|lzma)" [pdflatex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [vi]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [mozilla-firefox]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [ooimpress]="!*.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)" [gvim]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [uncompress]="!*.Z" [kid3-qt]="!*.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)" [xanim]="!*.@(mpg|mpeg|avi|mov|qt)" [unpigz]="!*.@(Z|[gGd]z|t[ag]z)" [portecle]="!@(*.@(ks|jks|jceks|p12|pfx|bks|ubr|gkr|cer|crt|cert|p7b|pkipath|pem|p10|csr|crl)|cacerts)" [oocalc]="!*.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)" [emacs]="*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [fbxine]="!*@(.@(mp?(e)g|MP?(E)G|wma|avi|AVI|asf|vob|VOB|bin|dat|divx|DIVX|vcd|ps|pes|fli|flv|FLV|fxm|FXM|viv|rm|ram|yuv|mov|MOV|qt|QT|wmv|mp[234]|MP[234]|m4[pv]|M4[PV]|mkv|MKV|og[gmv]|OG[GMV]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|wav|WAV|flac|FLAC|asx|ASX|mng|MNG|srt|m[eo]d|M[EO]D|s[3t]m|S[3T]M|it|IT|xm|XM)|+([0-9]).@(vdr|VDR))?(.part)" [lynx]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [ps2pdf]="!*.@(?(e)ps|pdf)" [kpdf]="!*.@(?(e)ps|pdf)" [oomath]="!*.@(sxm|smf|mml|odf)" [compress]="*.Z" [iceweasel]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [mpg321]="!*.mp3" [mpg123]="!*.mp3" [zcat]="!*.@(Z|[gGd]z|t[ag]z)" [unzip]="!*.@(zip|[ejsw]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|do[ct][xm]|p[op]t[mx]|xl[st][xm])" [pbunzip2]="!*.?(t)bz?(2)" [kid3]="!*.@(mp[234c]|og[ag]|@(fl|a)ac|m4[abp]|spx|tta|w?(a)v|wma|aif?(f)|asf|ape)" [pdfjadetex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [dvipdf]="!*.dvi" [gharbour]="!*.@([Pp][Rr][Gg]|[Cc][Ll][Pp])" [modplug123]="!*.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|okta|p[st]m|s[3t]m|ult|umx|wav|xm)" [dvipdfm]="!*.dvi" [oobase]="!*.odb" [texi2html]="!*.texi*" [zipinfo]="!*.@(zip|[ejsw]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|do[ct][xm]|p[op]t[mx]|xl[st][xm])" [epiphany]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [gunzip]="!*.@(Z|[gGd]z|t[ag]z)" [google-chrome]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [okular]="!*.@(okular|@(?(e|x)ps|?(E|X)PS|[pf]df|[PF]DF|dvi|DVI|cb[rz]|CB[RZ]|djv?(u)|DJV?(U)|dvi|DVI|gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA|PCX|epub|EPUB|odt|ODT|fb?(2)|FB?(2)|mobi|MOBI|g3|G3|chm|CHM)?(.?(gz|GZ|bz2|BZ2)))" [slitex]="!*.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [galeon]="!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [bzme]="!*.@(zip|z|gz|tgz)" [xfig]="!*.fig" [xzcat]="!*.@(?(t)xz|tlz|lzma)" [timidity]="!*.@(mid?(i)|rmi|rcp|[gr]36|g18|mod|xm|it|x3m|s[3t]m|kar)" [dviselect]="!*.dvi" [xdvi]="!*.@(dvi|DVI)?(.@(gz|Z|bz2))" )
  83. __expand_tilde_by_ref ()
  84. {
  85. if [[ ${!1} == \~* ]]; then
  86. if [[ ${!1} == */* ]]; then
  87. eval $1="${!1/%\/*}"/'${!1#*/}';
  88. else
  89. eval $1="${!1}";
  90. fi;
  91. fi
  92. }
  93. __get_cword_at_cursor_by_ref ()
  94. {
  95. local cword words=();
  96. __reassemble_comp_words_by_ref "$1" words cword;
  97. local i cur index=$COMP_POINT lead=${COMP_LINE:0:$COMP_POINT};
  98. if [[ $index -gt 0 && ( -n $lead && -n ${lead//[[:space:]]} ) ]]; then
  99. cur=$COMP_LINE;
  100. for ((i = 0; i <= cword; ++i ))
  101. do
  102. while [[ ${#cur} -ge ${#words[i]} && "${cur:0:${#words[i]}}" != "${words[i]}" ]]; do
  103. cur="${cur:1}";
  104. ((index--));
  105. done;
  106. if [[ $i -lt $cword ]]; then
  107. local old_size=${#cur};
  108. cur="${cur#"${words[i]}"}";
  109. local new_size=${#cur};
  110. index=$(( index - old_size + new_size ));
  111. fi;
  112. done;
  113. [[ -n $cur && ! -n ${cur//[[:space:]]} ]] && cur=;
  114. [[ $index -lt 0 ]] && index=0;
  115. fi;
  116. local "$2" "$3" "$4" && _upvars -a${#words[@]} $2 "${words[@]}" -v $3 "$cword" -v $4 "${cur:0:$index}"
  117. }
  118. __ltrim_colon_completions ()
  119. {
  120. if [[ "$1" == *:* && "$COMP_WORDBREAKS" == *:* ]]; then
  121. local colon_word=${1%"${1##*:}"};
  122. local i=${#COMPREPLY[*]};
  123. while [[ $((--i)) -ge 0 ]]; do
  124. COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"};
  125. done;
  126. fi
  127. }
  128. __parse_options ()
  129. {
  130. local option option2 i IFS='
  131. ,/|';
  132. option=;
  133. for i in $1;
  134. do
  135. case $i in
  136. ---*)
  137. break
  138. ;;
  139. --?*)
  140. option=$i;
  141. break
  142. ;;
  143. -?*)
  144. [[ -n $option ]] || option=$i
  145. ;;
  146. *)
  147. break
  148. ;;
  149. esac;
  150. done;
  151. [[ -n $option ]] || return 0;
  152. IFS='
  153. ';
  154. if [[ $option =~ (\[((no|dont)-?)\]). ]]; then
  155. option2=${option/"${BASH_REMATCH[1]}"/};
  156. option2=${option2%%[<{().[]*};
  157. printf '%s\n' "${option2/=*/=}";
  158. option=${option/"${BASH_REMATCH[1]}"/"${BASH_REMATCH[2]}"};
  159. fi;
  160. option=${option%%[<{().[]*};
  161. printf '%s\n' "${option/=*/=}"
  162. }
  163. __reassemble_comp_words_by_ref ()
  164. {
  165. local exclude i j line ref;
  166. if [[ -n $1 ]]; then
  167. exclude="${1//[^$COMP_WORDBREAKS]}";
  168. fi;
  169. eval $3=$COMP_CWORD;
  170. if [[ -n $exclude ]]; then
  171. line=$COMP_LINE;
  172. for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++))
  173. do
  174. while [[ $i -gt 0 && ${COMP_WORDS[$i]} == +([$exclude]) ]]; do
  175. [[ $line != [' ']* ]] && (( j >= 2 )) && ((j--));
  176. ref="$2[$j]";
  177. eval $2[$j]=\${!ref}\${COMP_WORDS[i]};
  178. [[ $i == $COMP_CWORD ]] && eval $3=$j;
  179. line=${line#*"${COMP_WORDS[$i]}"};
  180. [[ $line == [' ']* ]] && ((j++));
  181. (( $i < ${#COMP_WORDS[@]} - 1)) && ((i++)) || break 2;
  182. done;
  183. ref="$2[$j]";
  184. eval $2[$j]=\${!ref}\${COMP_WORDS[i]};
  185. line=${line#*"${COMP_WORDS[i]}"};
  186. [[ $i == $COMP_CWORD ]] && eval $3=$j;
  187. done;
  188. [[ $i == $COMP_CWORD ]] && eval $3=$j;
  189. else
  190. eval $2=\( \"\${COMP_WORDS[@]}\" \);
  191. fi
  192. }
  193. _allowed_groups ()
  194. {
  195. if _complete_as_root; then
  196. local IFS='
  197. ';
  198. COMPREPLY=($( compgen -g -- "$1" ));
  199. else
  200. local IFS='
  201. ';
  202. COMPREPLY=($( compgen -W "$( id -Gn 2>/dev/null || groups 2>/dev/null )" -- "$1" ));
  203. fi
  204. }
  205. _allowed_users ()
  206. {
  207. if _complete_as_root; then
  208. local IFS='
  209. ';
  210. COMPREPLY=($( compgen -u -- "${1:-$cur}" ));
  211. else
  212. local IFS='
  213. ';
  214. COMPREPLY=($( compgen -W "$( id -un 2>/dev/null || whoami 2>/dev/null )" -- "${1:-$cur}" ));
  215. fi
  216. }
  217. _available_interfaces ()
  218. {
  219. local cmd PATH=$PATH:/sbin;
  220. if [[ ${1:-} == -w ]]; then
  221. cmd="iwconfig";
  222. else
  223. if [[ ${1:-} == -a ]]; then
  224. cmd="{ ifconfig || ip link show up; }";
  225. else
  226. cmd="{ ifconfig -a || ip link show; }";
  227. fi;
  228. fi;
  229. COMPREPLY=($( eval $cmd 2>/dev/null | awk '/^[^ \t]/ { if ($1 ~ /^[0-9]+:/) { print $2 } else { print $1 } }' ));
  230. COMPREPLY=($( compgen -W '${COMPREPLY[@]/%[[:punct:]]/}' -- "$cur" ))
  231. }
  232. _cd ()
  233. {
  234. local cur prev words cword;
  235. _init_completion || return;
  236. local IFS='
  237. ' i j k;
  238. compopt -o filenames;
  239. if [[ -z "${CDPATH:-}" || "$cur" == ?(.)?(.)/* ]]; then
  240. _filedir -d;
  241. return 0;
  242. fi;
  243. local -r mark_dirs=$(_rl_enabled mark-directories && echo y);
  244. local -r mark_symdirs=$(_rl_enabled mark-symlinked-directories && echo y);
  245. for i in ${CDPATH//:/'
  246. '};
  247. do
  248. k="${#COMPREPLY[@]}";
  249. for j in $( compgen -d $i/$cur );
  250. do
  251. if [[ ( -n $mark_symdirs && -h $j || -n $mark_dirs && ! -h $j ) && ! -d ${j#$i/} ]]; then
  252. j+="/";
  253. fi;
  254. COMPREPLY[k++]=${j#$i/};
  255. done;
  256. done;
  257. _filedir -d;
  258. if [[ ${#COMPREPLY[@]} -eq 1 ]]; then
  259. i=${COMPREPLY[0]};
  260. if [[ "$i" == "$cur" && $i != "*/" ]]; then
  261. COMPREPLY[0]="${i}/";
  262. fi;
  263. fi;
  264. return 0
  265. }
  266. _cd_devices ()
  267. {
  268. COMPREPLY+=($( compgen -f -d -X "!*/?([amrs])cd*" -- "${cur:-/dev/}" ))
  269. }
  270. _command ()
  271. {
  272. local offset i;
  273. offset=1;
  274. for ((i=1; i <= COMP_CWORD; i++ ))
  275. do
  276. if [[ "${COMP_WORDS[i]}" != -* ]]; then
  277. offset=$i;
  278. break;
  279. fi;
  280. done;
  281. _command_offset $offset
  282. }
  283. _command_offset ()
  284. {
  285. local word_offset=$1 i j;
  286. for ((i=0; i < $word_offset; i++ ))
  287. do
  288. for ((j=0; j <= ${#COMP_LINE}; j++ ))
  289. do
  290. [[ "$COMP_LINE" == "${COMP_WORDS[i]}"* ]] && break;
  291. COMP_LINE=${COMP_LINE:1};
  292. ((COMP_POINT--));
  293. done;
  294. COMP_LINE=${COMP_LINE#"${COMP_WORDS[i]}"};
  295. ((COMP_POINT-=${#COMP_WORDS[i]}));
  296. done;
  297. for ((i=0; i <= COMP_CWORD - $word_offset; i++ ))
  298. do
  299. COMP_WORDS[i]=${COMP_WORDS[i+$word_offset]};
  300. done;
  301. for ((i; i <= COMP_CWORD; i++ ))
  302. do
  303. unset COMP_WORDS[i];
  304. done;
  305. ((COMP_CWORD -= $word_offset));
  306. COMPREPLY=();
  307. local cur;
  308. _get_comp_words_by_ref cur;
  309. if [[ $COMP_CWORD -eq 0 ]]; then
  310. local IFS='
  311. ';
  312. compopt -o filenames;
  313. COMPREPLY=($( compgen -d -c -- "$cur" ));
  314. else
  315. local cmd=${COMP_WORDS[0]} compcmd=${COMP_WORDS[0]};
  316. local cspec=$( complete -p $cmd 2>/dev/null );
  317. if [[ ! -n $cspec && $cmd == */* ]]; then
  318. cspec=$( complete -p ${cmd##*/} 2>/dev/null );
  319. [[ -n $cspec ]] && compcmd=${cmd##*/};
  320. fi;
  321. if [[ ! -n $cspec ]]; then
  322. compcmd=${cmd##*/};
  323. _completion_loader $compcmd;
  324. cspec=$( complete -p $compcmd 2>/dev/null );
  325. fi;
  326. if [[ -n $cspec ]]; then
  327. if [[ ${cspec#* -F } != $cspec ]]; then
  328. local func=${cspec#*-F };
  329. func=${func%% *};
  330. if [[ ${#COMP_WORDS[@]} -ge 2 ]]; then
  331. $func $cmd "${COMP_WORDS[${#COMP_WORDS[@]}-1]}" "${COMP_WORDS[${#COMP_WORDS[@]}-2]}";
  332. else
  333. $func $cmd "${COMP_WORDS[${#COMP_WORDS[@]}-1]}";
  334. fi;
  335. local opt;
  336. while [[ $cspec == *" -o "* ]]; do
  337. cspec=${cspec#*-o };
  338. opt=${cspec%% *};
  339. compopt -o $opt;
  340. cspec=${cspec#$opt};
  341. done;
  342. else
  343. cspec=${cspec#complete};
  344. cspec=${cspec%%$compcmd};
  345. COMPREPLY=($( eval compgen "$cspec" -- '$cur' ));
  346. fi;
  347. else
  348. if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
  349. _minimal;
  350. fi;
  351. fi;
  352. fi
  353. }
  354. _complete_as_root ()
  355. {
  356. [[ $EUID -eq 0 || -n ${root_command:-} ]]
  357. }
  358. _completion_loader ()
  359. {
  360. local compfile=./completions;
  361. [[ $BASH_SOURCE == */* ]] && compfile="${BASH_SOURCE%/*}/completions";
  362. compfile+="/${1##*/}";
  363. [[ -f "$compfile" ]] && . "$compfile" &>/dev/null && return 124;
  364. complete -F _minimal "$1" && return 124
  365. }
  366. _configured_interfaces ()
  367. {
  368. if [[ -f /etc/debian_version ]]; then
  369. COMPREPLY=($( compgen -W "$( sed -ne 's|^iface \([^ ]\{1,\}\).*$|\1|p' /etc/network/interfaces )" -- "$cur" ));
  370. else
  371. if [[ -f /etc/SuSE-release ]]; then
  372. COMPREPLY=($( compgen -W "$( printf '%s\n' /etc/sysconfig/network/ifcfg-* | sed -ne 's|.*ifcfg-\(.*\)|\1|p' )" -- "$cur" ));
  373. else
  374. if [[ -f /etc/pld-release ]]; then
  375. COMPREPLY=($( compgen -W "$( command ls -B /etc/sysconfig/interfaces | sed -ne 's|.*ifcfg-\(.*\)|\1|p' )" -- "$cur" ));
  376. else
  377. COMPREPLY=($( compgen -W "$( printf '%s\n' /etc/sysconfig/network-scripts/ifcfg-* | sed -ne 's|.*ifcfg-\(.*\)|\1|p' )" -- "$cur" ));
  378. fi;
  379. fi;
  380. fi
  381. }
  382. _count_args ()
  383. {
  384. local i cword words;
  385. __reassemble_comp_words_by_ref "$1" words cword;
  386. args=1;
  387. for i in "${words[@]:1:cword-1}";
  388. do
  389. [[ "$i" != -* ]] && args=$(($args+1));
  390. done
  391. }
  392. _dvd_devices ()
  393. {
  394. COMPREPLY+=($( compgen -f -d -X "!*/?(r)dvd*" -- "${cur:-/dev/}" ))
  395. }
  396. _expand ()
  397. {
  398. if [[ "$cur" == \~*/* ]]; then
  399. eval cur=$cur 2> /dev/null;
  400. else
  401. if [[ "$cur" == \~* ]]; then
  402. cur=${cur#\~};
  403. COMPREPLY=($( compgen -P '~' -u "$cur" ));
  404. [[ ${#COMPREPLY[@]} -eq 1 ]] && eval COMPREPLY[0]=${COMPREPLY[0]};
  405. return ${#COMPREPLY[@]};
  406. fi;
  407. fi
  408. }
  409. _filedir ()
  410. {
  411. local i IFS='
  412. ' xspec;
  413. _tilde "$cur" || return 0;
  414. local -a toks;
  415. local quoted x tmp;
  416. _quote_readline_by_ref "$cur" quoted;
  417. x=$( compgen -d -- "$quoted" ) && while read -r tmp; do
  418. toks+=("$tmp");
  419. done <<< "$x";
  420. if [[ "$1" != -d ]]; then
  421. xspec=${1:+"!*.@($1|${1^^})"};
  422. x=$( compgen -f -X "$xspec" -- $quoted ) && while read -r tmp; do
  423. toks+=("$tmp");
  424. done <<< "$x";
  425. fi;
  426. [[ -n ${COMP_FILEDIR_FALLBACK:-} && -n "$1" && "$1" != -d && ${#toks[@]} -lt 1 ]] && x=$( compgen -f -- $quoted ) && while read -r tmp; do
  427. toks+=("$tmp");
  428. done <<< "$x";
  429. if [[ ${#toks[@]} -ne 0 ]]; then
  430. compopt -o filenames 2> /dev/null;
  431. COMPREPLY+=("${toks[@]}");
  432. fi
  433. }
  434. _filedir_xspec ()
  435. {
  436. local cur prev words cword;
  437. _init_completion || return;
  438. _tilde "$cur" || return 0;
  439. local IFS='
  440. ' xspec=${_xspecs[${1##*/}]} tmp;
  441. local -a toks;
  442. toks=($(
  443. compgen -d -- "$(quote_readline "$cur")" | {
  444. while read -r tmp; do
  445. printf '%s\n' $tmp
  446. done
  447. }
  448. ));
  449. eval xspec="${xspec}";
  450. local matchop=!;
  451. if [[ $xspec == !* ]]; then
  452. xspec=${xspec#!};
  453. matchop=@;
  454. fi;
  455. xspec="$matchop($xspec|${xspec^^})";
  456. toks+=($(
  457. eval compgen -f -X "!$xspec" -- "\$(quote_readline "\$cur")" | {
  458. while read -r tmp; do
  459. [[ -n $tmp ]] && printf '%s\n' $tmp
  460. done
  461. }
  462. ));
  463. if [[ ${#toks[@]} -ne 0 ]]; then
  464. compopt -o filenames;
  465. COMPREPLY=("${toks[@]}");
  466. fi
  467. }
  468. _fstypes ()
  469. {
  470. local fss;
  471. if [[ -e /proc/filesystems ]]; then
  472. fss="$( cut -d' ' -f2 /proc/filesystems )
  473. $( awk '! /\*/ { print $NF }' /etc/filesystems 2>/dev/null )";
  474. else
  475. fss="$( awk '/^[ \t]*[^#]/ { print $3 }' /etc/fstab 2>/dev/null )
  476. $( awk '/^[ \t]*[^#]/ { print $3 }' /etc/mnttab 2>/dev/null )
  477. $( awk '/^[ \t]*[^#]/ { print $4 }' /etc/vfstab 2>/dev/null )
  478. $( awk '{ print $1 }' /etc/dfs/fstypes 2>/dev/null )
  479. $( [[ -d /etc/fs ]] && command ls /etc/fs )";
  480. fi;
  481. [[ -n $fss ]] && COMPREPLY+=($( compgen -W "$fss" -- "$cur" ))
  482. }
  483. _get_comp_words_by_ref ()
  484. {
  485. local exclude flag i OPTIND=1;
  486. local cur cword words=();
  487. local upargs=() upvars=() vcur vcword vprev vwords;
  488. while getopts "c:i:n:p:w:" flag "$@"; do
  489. case $flag in
  490. c)
  491. vcur=$OPTARG
  492. ;;
  493. i)
  494. vcword=$OPTARG
  495. ;;
  496. n)
  497. exclude=$OPTARG
  498. ;;
  499. p)
  500. vprev=$OPTARG
  501. ;;
  502. w)
  503. vwords=$OPTARG
  504. ;;
  505. esac;
  506. done;
  507. while [[ $# -ge $OPTIND ]]; do
  508. case ${!OPTIND} in
  509. cur)
  510. vcur=cur
  511. ;;
  512. prev)
  513. vprev=prev
  514. ;;
  515. cword)
  516. vcword=cword
  517. ;;
  518. words)
  519. vwords=words
  520. ;;
  521. *)
  522. echo "bash: $FUNCNAME(): \`${!OPTIND}': unknown argument" 1>&2;
  523. return 1
  524. ;;
  525. esac;
  526. let "OPTIND += 1";
  527. done;
  528. __get_cword_at_cursor_by_ref "$exclude" words cword cur;
  529. [[ -n $vcur ]] && {
  530. upvars+=("$vcur");
  531. upargs+=(-v $vcur "$cur")
  532. };
  533. [[ -n $vcword ]] && {
  534. upvars+=("$vcword");
  535. upargs+=(-v $vcword "$cword")
  536. };
  537. [[ -n $vprev && $cword -ge 1 ]] && {
  538. upvars+=("$vprev");
  539. upargs+=(-v $vprev "${words[cword - 1]}")
  540. };
  541. [[ -n $vwords ]] && {
  542. upvars+=("$vwords");
  543. upargs+=(-a${#words[@]} $vwords "${words[@]}")
  544. };
  545. (( ${#upvars[@]} )) && local "${upvars[@]}" && _upvars "${upargs[@]}"
  546. }
  547. _get_cword ()
  548. {
  549. local LC_CTYPE=C;
  550. local cword words;
  551. __reassemble_comp_words_by_ref "$1" words cword;
  552. if [[ -n ${2//[^0-9]/} ]]; then
  553. printf "%s" "${words[cword-$2]}";
  554. else
  555. if [[ "${#words[cword]}" -eq 0 || "$COMP_POINT" == "${#COMP_LINE}" ]]; then
  556. printf "%s" "${words[cword]}";
  557. else
  558. local i;
  559. local cur="$COMP_LINE";
  560. local index="$COMP_POINT";
  561. for ((i = 0; i <= cword; ++i ))
  562. do
  563. while [[ "${#cur}" -ge ${#words[i]} && "${cur:0:${#words[i]}}" != "${words[i]}" ]]; do
  564. cur="${cur:1}";
  565. ((index--));
  566. done;
  567. if [[ "$i" -lt "$cword" ]]; then
  568. local old_size="${#cur}";
  569. cur="${cur#${words[i]}}";
  570. local new_size="${#cur}";
  571. index=$(( index - old_size + new_size ));
  572. fi;
  573. done;
  574. if [[ "${words[cword]:0:${#cur}}" != "$cur" ]]; then
  575. printf "%s" "${words[cword]}";
  576. else
  577. printf "%s" "${cur:0:$index}";
  578. fi;
  579. fi;
  580. fi
  581. }
  582. _get_first_arg ()
  583. {
  584. local i;
  585. arg=;
  586. for ((i=1; i < COMP_CWORD; i++ ))
  587. do
  588. if [[ "${COMP_WORDS[i]}" != -* ]]; then
  589. arg=${COMP_WORDS[i]};
  590. break;
  591. fi;
  592. done
  593. }
  594. _get_pword ()
  595. {
  596. if [[ $COMP_CWORD -ge 1 ]]; then
  597. _get_cword "${@:-}" 1;
  598. fi
  599. }
  600. _gids ()
  601. {
  602. if type getent &>/dev/null; then
  603. COMPREPLY=($( compgen -W '$( getent group | cut -d: -f3 )' -- "$cur" ));
  604. else
  605. if type perl &>/dev/null; then
  606. COMPREPLY=($( compgen -W '$( perl -e '"'"'while (($gid) = (getgrent)[2]) { print $gid . "\n" }'"'"' )' -- "$cur" ));
  607. else
  608. COMPREPLY=($( compgen -W '$( cut -d: -f3 /etc/group )' -- "$cur" ));
  609. fi;
  610. fi
  611. }
  612. _have ()
  613. {
  614. PATH=$PATH:/usr/sbin:/sbin:/usr/local/sbin type $1 &>/dev/null
  615. }
  616. _init_completion ()
  617. {
  618. local exclude= flag outx errx inx OPTIND=1;
  619. while getopts "n:e:o:i:s" flag "$@"; do
  620. case $flag in
  621. n)
  622. exclude+=$OPTARG
  623. ;;
  624. e)
  625. errx=$OPTARG
  626. ;;
  627. o)
  628. outx=$OPTARG
  629. ;;
  630. i)
  631. inx=$OPTARG
  632. ;;
  633. s)
  634. split=false;
  635. exclude+==
  636. ;;
  637. esac;
  638. done;
  639. COMPREPLY=();
  640. local redir="@(?([0-9])<|?([0-9&])>?(>)|>&)";
  641. _get_comp_words_by_ref -n "$exclude<>&" cur prev words cword;
  642. _variables && return 1;
  643. if [[ $cur == $redir* || $prev == $redir ]]; then
  644. local xspec;
  645. case $cur in
  646. 2'>'*)
  647. xspec=$errx
  648. ;;
  649. *'>'*)
  650. xspec=$outx
  651. ;;
  652. *'<'*)
  653. xspec=$inx
  654. ;;
  655. *)
  656. case $prev in
  657. 2'>'*)
  658. xspec=$errx
  659. ;;
  660. *'>'*)
  661. xspec=$outx
  662. ;;
  663. *'<'*)
  664. xspec=$inx
  665. ;;
  666. esac
  667. ;;
  668. esac;
  669. cur="${cur##$redir}";
  670. _filedir $xspec;
  671. return 1;
  672. fi;
  673. local i skip;
  674. for ((i=1; i < ${#words[@]}; 1))
  675. do
  676. if [[ ${words[i]} == $redir* ]]; then
  677. [[ ${words[i]} == $redir ]] && skip=2 || skip=1;
  678. words=("${words[@]:0:i}" "${words[@]:i+skip}");
  679. [[ $i -le $cword ]] && cword=$(( cword - skip ));
  680. else
  681. i=$(( ++i ));
  682. fi;
  683. done;
  684. [[ $cword -eq 0 ]] && return 1;
  685. prev=${words[cword-1]};
  686. [[ -n ${split-} ]] && _split_longopt && split=true;
  687. return 0
  688. }
  689. _installed_modules ()
  690. {
  691. COMPREPLY=($( compgen -W "$( PATH="$PATH:/sbin" lsmod | awk '{if (NR != 1) print $1}' )" -- "$1" ))
  692. }
  693. _ip_addresses ()
  694. {
  695. local PATH=$PATH:/sbin;
  696. COMPREPLY+=($( compgen -W "$( { LC_ALL=C ifconfig -a || ip addr show; } 2>/dev/null |
  697. sed -ne 's/.*addr:\([^[:space:]]*\).*/\1/p' -ne 's|.*inet[[:space:]]\{1,\}\([^[:space:]/]*\).*|\1|p' )" -- "$cur" ))
  698. }
  699. _kernel_versions ()
  700. {
  701. COMPREPLY=($( compgen -W '$( command ls /lib/modules )' -- "$cur" ))
  702. }
  703. _known_hosts ()
  704. {
  705. local cur prev words cword;
  706. _init_completion -n : || return;
  707. local options;
  708. [[ "$1" == -a || "$2" == -a ]] && options=-a;
  709. [[ "$1" == -c || "$2" == -c ]] && options+=" -c";
  710. _known_hosts_real $options -- "$cur"
  711. }
  712. _known_hosts_real ()
  713. {
  714. local configfile flag prefix;
  715. local cur curd awkcur user suffix aliases i host;
  716. local -a kh khd config;
  717. local OPTIND=1;
  718. while getopts "acF:p:" flag "$@"; do
  719. case $flag in
  720. a)
  721. aliases='yes'
  722. ;;
  723. c)
  724. suffix=':'
  725. ;;
  726. F)
  727. configfile=$OPTARG
  728. ;;
  729. p)
  730. prefix=$OPTARG
  731. ;;
  732. esac;
  733. done;
  734. [[ $# -lt $OPTIND ]] && echo "error: $FUNCNAME: missing mandatory argument CWORD";
  735. cur=${!OPTIND};
  736. let "OPTIND += 1";
  737. [[ $# -ge $OPTIND ]] && echo "error: $FUNCNAME("$@"): unprocessed arguments:" $(while [[ $# -ge $OPTIND ]]; do printf '%s\n' ${!OPTIND}; shift; done);
  738. [[ $cur == *@* ]] && user=${cur%@*}@ && cur=${cur#*@};
  739. kh=();
  740. if [[ -n $configfile ]]; then
  741. [[ -r $configfile ]] && config+=("$configfile");
  742. else
  743. for i in /etc/ssh/ssh_config ~/.ssh/config ~/.ssh2/config;
  744. do
  745. [[ -r $i ]] && config+=("$i");
  746. done;
  747. fi;
  748. if [[ ${#config[@]} -gt 0 ]]; then
  749. local OIFS=$IFS IFS='
  750. ' j;
  751. local -a tmpkh;
  752. tmpkh=($( awk 'sub("^[ \t]*([Gg][Ll][Oo][Bb][Aa][Ll]|[Uu][Ss][Ee][Rr])[Kk][Nn][Oo][Ww][Nn][Hh][Oo][Ss][Tt][Ss][Ff][Ii][Ll][Ee][ \t]+", "") { print $0 }' "${config[@]}" | sort -u ));
  753. IFS=$OIFS;
  754. for i in "${tmpkh[@]}";
  755. do
  756. while [[ $i =~ ^([^\"]*)\"([^\"]*)\"(.*)$ ]]; do
  757. i=${BASH_REMATCH[1]}${BASH_REMATCH[3]};
  758. j=${BASH_REMATCH[2]};
  759. __expand_tilde_by_ref j;
  760. [[ -r $j ]] && kh+=("$j");
  761. done;
  762. for j in $i;
  763. do
  764. __expand_tilde_by_ref j;
  765. [[ -r $j ]] && kh+=("$j");
  766. done;
  767. done;
  768. fi;
  769. if [[ -z $configfile ]]; then
  770. for i in /etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2 /etc/known_hosts /etc/known_hosts2 ~/.ssh/known_hosts ~/.ssh/known_hosts2;
  771. do
  772. [[ -r $i ]] && kh+=("$i");
  773. done;
  774. for i in /etc/ssh2/knownhosts ~/.ssh2/hostkeys;
  775. do
  776. [[ -d $i ]] && khd+=("$i"/*pub);
  777. done;
  778. fi;
  779. if [[ ${#kh[@]} -gt 0 || ${#khd[@]} -gt 0 ]]; then
  780. awkcur=${cur//\//\\\/};
  781. awkcur=${awkcur//\./\\\.};
  782. curd=$awkcur;
  783. if [[ "$awkcur" == [0-9]*[.:]* ]]; then
  784. awkcur="^$awkcur[.:]*";
  785. else
  786. if [[ "$awkcur" == [0-9]* ]]; then
  787. awkcur="^$awkcur.*[.:]";
  788. else
  789. if [[ -z $awkcur ]]; then
  790. awkcur="[a-z.:]";
  791. else
  792. awkcur="^$awkcur";
  793. fi;
  794. fi;
  795. fi;
  796. if [[ ${#kh[@]} -gt 0 ]]; then
  797. COMPREPLY+=($( awk 'BEGIN {FS=","}
  798. /^\s*[^|\#]/ {
  799. sub("^@[^ ]+ +", ""); \
  800. sub(" .*$", ""); \
  801. for (i=1; i<=NF; ++i) { \
  802. sub("^\\[", "", $i); sub("\\](:[0-9]+)?$", "", $i); \
  803. if ($i !~ /[*?]/ && $i ~ /'"$awkcur"'/) {print $i} \
  804. }}' "${kh[@]}" 2>/dev/null ));
  805. fi;
  806. if [[ ${#khd[@]} -gt 0 ]]; then
  807. for i in "${khd[@]}";
  808. do
  809. if [[ "$i" == *key_22_$curd*.pub && -r "$i" ]]; then
  810. host=${i/#*key_22_/};
  811. host=${host/%.pub/};
  812. COMPREPLY+=($host);
  813. fi;
  814. done;
  815. fi;
  816. for ((i=0; i < ${#COMPREPLY[@]}; i++ ))
  817. do
  818. COMPREPLY[i]=$prefix$user${COMPREPLY[i]}$suffix;
  819. done;
  820. fi;
  821. if [[ ${#config[@]} -gt 0 && -n "$aliases" ]]; then
  822. local hosts=$( sed -ne 's/^[ \t]*[Hh][Oo][Ss][Tt]\([Nn][Aa][Mm][Ee]\)\{0,1\}['"$'\t '"']\{1,\}\([^#*?]*\)\(#.*\)\{0,1\}$/\2/p' "${config[@]}" );
  823. COMPREPLY+=($( compgen -P "$prefix$user" -S "$suffix" -W "$hosts" -- "$cur" ));
  824. fi;
  825. if [[ -n ${COMP_KNOWN_HOSTS_WITH_AVAHI:-} ]] && type avahi-browse &>/dev/null; then
  826. COMPREPLY+=($( compgen -P "$prefix$user" -S "$suffix" -W "$( avahi-browse -cpr _workstation._tcp 2>/dev/null | awk -F';' '/^=/ { print $7 }' | sort -u )" -- "$cur" ));
  827. fi;
  828. COMPREPLY+=($( compgen -W "$( ruptime 2>/dev/null | awk '!/^ruptime:/ { print $1 }' )" -- "$cur" ));
  829. if [[ -n ${COMP_KNOWN_HOSTS_WITH_HOSTFILE-1} ]]; then
  830. COMPREPLY+=($( compgen -A hostname -P "$prefix$user" -S "$suffix" -- "$cur" ));
  831. fi;
  832. __ltrim_colon_completions "$prefix$user$cur";
  833. return 0
  834. }
  835. _longopt ()
  836. {
  837. local cur prev words cword split;
  838. _init_completion -s || return;
  839. case "${prev,,}" in
  840. --help | --usage | --version)
  841. return 0
  842. ;;
  843. --*dir*)
  844. _filedir -d;
  845. return 0
  846. ;;
  847. --*file* | --*path*)
  848. _filedir;
  849. return 0
  850. ;;
  851. --+([-a-z0-9_]))
  852. local argtype=$( $1 --help 2>&1 | sed -ne "s|.*$prev\[\{0,1\}=[<[]\{0,1\}\([-A-Za-z0-9_]\{1,\}\).*|\1|p" );
  853. case ${argtype,,} in
  854. *dir*)
  855. _filedir -d;
  856. return 0
  857. ;;
  858. *file* | *path*)
  859. _filedir;
  860. return 0
  861. ;;
  862. esac
  863. ;;
  864. esac;
  865. $split && return 0;
  866. if [[ "$cur" == -* ]]; then
  867. COMPREPLY=($( compgen -W "$( $1 --help 2>&1 | sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}=\{0,1\}\).*/\1/p' | sort -u )" -- "$cur" ));
  868. [[ $COMPREPLY == *= ]] && compopt -o nospace;
  869. else
  870. if [[ "$1" == @(mk|rm)dir ]]; then
  871. _filedir -d;
  872. else
  873. _filedir;
  874. fi;
  875. fi
  876. }
  877. _mac_addresses ()
  878. {
  879. local re='\([A-Fa-f0-9]\{2\}:\)\{5\}[A-Fa-f0-9]\{2\}';
  880. local PATH="$PATH:/sbin:/usr/sbin";
  881. COMPREPLY+=($( { ifconfig -a || ip link show; } 2>/dev/null | sed -ne "s/.*[[:space:]]HWaddr[[:space:]]\{1,\}\($re\)[[:space:]].*/\1/p" -ne "s/.*[[:space:]]HWaddr[[:space:]]\{1,\}\($re\)[[:space:]]*$/\1/p" -ne "s|.*[[:space:]]\(link/\)\{0,1\}ether[[:space:]]\{1,\}\($re\)[[:space:]].*|\2|p" -ne "s|.*[[:space:]]\(link/\)\{0,1\}ether[[:space:]]\{1,\}\($re\)[[:space:]]*$|\2|p"
  882. ));
  883. COMPREPLY+=($( { arp -an || ip neigh show; } 2>/dev/null | sed -ne "s/.*[[:space:]]\($re\)[[:space:]].*/\1/p" -ne "s/.*[[:space:]]\($re\)[[:space:]]*$/\1/p" ));
  884. COMPREPLY+=($( sed -ne "s/^[[:space:]]*\($re\)[[:space:]].*/\1/p" /etc/ethers 2>/dev/null ));
  885. COMPREPLY=($( compgen -W '${COMPREPLY[@]}' -- "$cur" ));
  886. __ltrim_colon_completions "$cur"
  887. }
  888. _minimal ()
  889. {
  890. local cur prev words cword split;
  891. _init_completion -s || return;
  892. $split && return;
  893. _filedir
  894. }
  895. _modules ()
  896. {
  897. local modpath;
  898. modpath=/lib/modules/$1;
  899. COMPREPLY=($( compgen -W "$( command ls -RL $modpath 2>/dev/null | sed -ne 's/^\(.*\)\.k\{0,1\}o\(\.[gx]z\)\{0,1\}$/\1/p' )" -- "$cur" ))
  900. }
  901. _ncpus ()
  902. {
  903. local var=NPROCESSORS_ONLN;
  904. [[ $OSTYPE == *linux* ]] && var=_$var;
  905. local n=$( getconf $var 2>/dev/null );
  906. printf %s ${n:-1}
  907. }
  908. _parse_help ()
  909. {
  910. eval local cmd=$( quote "$1" );
  911. local line;
  912. {
  913. case $cmd in
  914. -)
  915. cat
  916. ;;
  917. *)
  918. LC_ALL=C "$( dequote "$cmd" )" ${2:---help} 2>&1
  919. ;;
  920. esac
  921. } | while read -r line; do
  922. [[ $line == *([ ' '])-* ]] || continue;
  923. while [[ $line =~ ((^|[^-])-[A-Za-z0-9?][[:space:]]+)\[?[A-Z0-9]+\]? ]]; do
  924. line=${line/"${BASH_REMATCH[0]}"/"${BASH_REMATCH[1]}"};
  925. done;
  926. __parse_options "${line// or /, }";
  927. done
  928. }
  929. _parse_usage ()
  930. {
  931. eval local cmd=$( quote "$1" );
  932. local line match option i char;
  933. {
  934. case $cmd in
  935. -)
  936. cat
  937. ;;
  938. *)
  939. LC_ALL=C "$( dequote "$cmd" )" ${2:---usage} 2>&1
  940. ;;
  941. esac
  942. } | while read -r line; do
  943. while [[ $line =~ \[[[:space:]]*(-[^]]+)[[:space:]]*\] ]]; do
  944. match=${BASH_REMATCH[0]};
  945. option=${BASH_REMATCH[1]};
  946. case $option in
  947. -?(\[)+([a-zA-Z0-9?]))
  948. for ((i=1; i < ${#option}; i++ ))
  949. do
  950. char=${option:i:1};
  951. [[ $char != '[' ]] && printf '%s\n' -$char;
  952. done
  953. ;;
  954. *)
  955. __parse_options "$option"
  956. ;;
  957. esac;
  958. line=${line#*"$match"};
  959. done;
  960. done
  961. }
  962. _pci_ids ()
  963. {
  964. COMPREPLY+=($( compgen -W "$( PATH="$PATH:/sbin" lspci -n | awk '{print $3}')" -- "$cur" ))
  965. }
  966. _pgids ()
  967. {
  968. COMPREPLY=($( compgen -W '$( command ps axo pgid= )' -- "$cur" ))
  969. }
  970. _pids ()
  971. {
  972. COMPREPLY=($( compgen -W '$( command ps axo pid= )' -- "$cur" ))
  973. }
  974. _pnames ()
  975. {
  976. COMPREPLY=($( compgen -X '<defunct>' -W '$( command ps axo command= | \
  977. sed -e "s/ .*//" -e "s:.*/::" -e "s/:$//" -e "s/^[[(-]//" \
  978. -e "s/[])]$//" | sort -u )' -- "$cur" ))
  979. }
  980. _quote_readline_by_ref ()
  981. {
  982. if [[ $1 == \'* ]]; then
  983. printf -v $2 %s "${1:1}";
  984. else
  985. printf -v $2 %q "$1";
  986. fi;
  987. [[ ${!2} == \$* ]] && eval $2=${!2}
  988. }
  989. _realcommand ()
  990. {
  991. type -P "$1" > /dev/null && {
  992. if type -p realpath > /dev/null; then
  993. realpath "$(type -P "$1")";
  994. else
  995. if type -p greadlink > /dev/null; then
  996. greadlink -f "$(type -P "$1")";
  997. else
  998. if type -p readlink > /dev/null; then
  999. readlink -f "$(type -P "$1")";
  1000. else
  1001. type -P "$1";
  1002. fi;
  1003. fi;
  1004. fi
  1005. }
  1006. }
  1007. _rl_enabled ()
  1008. {
  1009. [[ "$( bind -v )" = *$1+([[:space:]])on* ]]
  1010. }
  1011. _root_command ()
  1012. {
  1013. local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin;
  1014. local root_command=$1;
  1015. _command
  1016. }
  1017. _service ()
  1018. {
  1019. local cur prev words cword;
  1020. _init_completion || return;
  1021. [[ $cword -gt 2 ]] && return 0;
  1022. if [[ $cword -eq 1 && $prev == ?(*/)service ]]; then
  1023. _services;
  1024. [[ -e /etc/mandrake-release ]] && _xinetd_services;
  1025. else
  1026. local sysvdirs;
  1027. _sysvdirs;
  1028. COMPREPLY=($( compgen -W '`sed -e "y/|/ /" \
  1029. -ne "s/^.*\(U\|msg_u\)sage.*{\(.*\)}.*$/\2/p" \
  1030. ${sysvdirs[0]}/${prev##*/} 2>/dev/null` start stop' -- "$cur" ));
  1031. fi
  1032. }
  1033. _services ()
  1034. {
  1035. local sysvdirs;
  1036. _sysvdirs;
  1037. local restore_nullglob=$(shopt -p nullglob);
  1038. shopt -s nullglob;
  1039. COMPREPLY=($( printf '%s\n' ${sysvdirs[0]}/!($_backup_glob|functions) ));
  1040. $restore_nullglob;
  1041. COMPREPLY+=($( systemctl list-units --full --all 2>/dev/null | awk '$1 ~ /\.service$/ { sub("\\.service$", "", $1); print $1 }' ));
  1042. COMPREPLY=($( compgen -W '${COMPREPLY[@]#${sysvdirs[0]}/}' -- "$cur" ))
  1043. }
  1044. _shells ()
  1045. {
  1046. local shell rest;
  1047. while read -r shell rest; do
  1048. [[ $shell == /* && $shell == "$cur"* ]] && COMPREPLY+=($shell);
  1049. done 2> /dev/null < /etc/shells
  1050. }
  1051. _signals ()
  1052. {
  1053. local -a sigs=($( compgen -P "$1" -A signal "SIG${cur#$1}" ));
  1054. COMPREPLY+=("${sigs[@]/#${1}SIG/${1}}")
  1055. }
  1056. _split_longopt ()
  1057. {
  1058. if [[ "$cur" == --?*=* ]]; then
  1059. prev="${cur%%?(\\)=*}";
  1060. cur="${cur#*=}";
  1061. return 0;
  1062. fi;
  1063. return 1
  1064. }
  1065. _sysvdirs ()
  1066. {
  1067. sysvdirs=();
  1068. [[ -d /etc/rc.d/init.d ]] && sysvdirs+=(/etc/rc.d/init.d);
  1069. [[ -d /etc/init.d ]] && sysvdirs+=(/etc/init.d);
  1070. [[ -f /etc/slackware-version ]] && sysvdirs=(/etc/rc.d)
  1071. }
  1072. _terms ()
  1073. {
  1074. COMPREPLY+=($( compgen -W "$( sed -ne 's/^\([^[:space:]#|]\{2,\}\)|.*/\1/p' /etc/termcap 2>/dev/null )" -- "$cur" ));
  1075. COMPREPLY+=($( compgen -W "$( { toe -a 2>/dev/null || toe 2>/dev/null; } | awk '{ print $1 }' | sort -u )" -- "$cur" ))
  1076. }
  1077. _tilde ()
  1078. {
  1079. local result=0;
  1080. if [[ $1 == \~* && $1 != */* ]]; then
  1081. COMPREPLY=($( compgen -P '~' -u "${1#\~}" ));
  1082. result=${#COMPREPLY[@]};
  1083. [[ $result -gt 0 ]] && compopt -o filenames 2> /dev/null;
  1084. fi;
  1085. return $result
  1086. }
  1087. _uids ()
  1088. {
  1089. if type getent &>/dev/null; then
  1090. COMPREPLY=($( compgen -W '$( getent passwd | cut -d: -f3 )' -- "$cur" ));
  1091. else
  1092. if type perl &>/dev/null; then
  1093. COMPREPLY=($( compgen -W '$( perl -e '"'"'while (($uid) = (getpwent)[2]) { print $uid . "\n" }'"'"' )' -- "$cur" ));
  1094. else
  1095. COMPREPLY=($( compgen -W '$( cut -d: -f3 /etc/passwd )' -- "$cur" ));
  1096. fi;
  1097. fi
  1098. }
  1099. _upvar ()
  1100. {
  1101. if unset -v "$1"; then
  1102. if (( $# == 2 )); then
  1103. eval $1=\"\$2\";
  1104. else
  1105. eval $1=\(\"\${@:2}\"\);
  1106. fi;
  1107. fi
  1108. }
  1109. _upvars ()
  1110. {
  1111. if ! (( $# )); then
  1112. echo "${FUNCNAME[0]}: usage: ${FUNCNAME[0]} [-v varname" "value] | [-aN varname [value ...]] ..." 1>&2;
  1113. return 2;
  1114. fi;
  1115. while (( $# )); do
  1116. case $1 in
  1117. -a*)
  1118. [[ -n ${1#-a} ]] || {
  1119. echo "bash: ${FUNCNAME[0]}: \`$1': missing" "number specifier" 1>&2;
  1120. return 1
  1121. };
  1122. printf %d "${1#-a}" &>/dev/null || {
  1123. echo "bash:" "${FUNCNAME[0]}: \`$1': invalid number specifier" 1>&2;
  1124. return 1
  1125. };
  1126. [[ -n "$2" ]] && unset -v "$2" && eval $2=\(\"\${@:3:${1#-a}}\"\) && shift $((${1#-a} + 2)) || {
  1127. echo "bash: ${FUNCNAME[0]}:" "\`$1${2+ }$2': missing argument(s)" 1>&2;
  1128. return 1
  1129. }
  1130. ;;
  1131. -v)
  1132. [[ -n "$2" ]] && unset -v "$2" && eval $2=\"\$3\" && shift 3 || {
  1133. echo "bash: ${FUNCNAME[0]}: $1: missing" "argument(s)" 1>&2;
  1134. return 1
  1135. }
  1136. ;;
  1137. *)
  1138. echo "bash: ${FUNCNAME[0]}: $1: invalid option" 1>&2;
  1139. return 1
  1140. ;;
  1141. esac;
  1142. done
  1143. }
  1144. _usb_ids ()
  1145. {
  1146. COMPREPLY+=($( compgen -W "$( PATH="$PATH:/sbin" lsusb | awk '{print $6}' )" -- "$cur" ))
  1147. }
  1148. _user_at_host ()
  1149. {
  1150. local cur prev words cword;
  1151. _init_completion -n : || return;
  1152. if [[ $cur == *@* ]]; then
  1153. _known_hosts_real "$cur";
  1154. else
  1155. COMPREPLY=($( compgen -u -- "$cur" ));
  1156. fi;
  1157. return 0
  1158. }
  1159. _usergroup ()
  1160. {
  1161. if [[ $cur = *\\\\* || $cur = *:*:* ]]; then
  1162. return;
  1163. else
  1164. if [[ $cur = *\\:* ]]; then
  1165. local prefix;
  1166. prefix=${cur%%*([^:])};
  1167. prefix=${prefix//\\};
  1168. local mycur="${cur#*[:]}";
  1169. if [[ $1 == -u ]]; then
  1170. _allowed_groups "$mycur";
  1171. else
  1172. local IFS='
  1173. ';
  1174. COMPREPLY=($( compgen -g -- "$mycur" ));
  1175. fi;
  1176. COMPREPLY=($( compgen -P "$prefix" -W "${COMPREPLY[@]}" ));
  1177. else
  1178. if [[ $cur = *:* ]]; then
  1179. local mycur="${cur#*:}";
  1180. if [[ $1 == -u ]]; then
  1181. _allowed_groups "$mycur";
  1182. else
  1183. local IFS='
  1184. ';
  1185. COMPREPLY=($( compgen -g -- "$mycur" ));
  1186. fi;
  1187. else
  1188. if [[ $1 == -u ]]; then
  1189. _allowed_users "$cur";
  1190. else
  1191. local IFS='
  1192. ';
  1193. COMPREPLY=($( compgen -u -- "$cur" ));
  1194. fi;
  1195. fi;
  1196. fi;
  1197. fi
  1198. }
  1199. _userland ()
  1200. {
  1201. local userland=$( uname -s );
  1202. [[ $userland == @(Linux|GNU/*) ]] && userland=GNU;
  1203. [[ $userland == $1 ]]
  1204. }
  1205. _variables ()
  1206. {
  1207. if [[ $cur =~ ^(\$\{?)([A-Za-z0-9_]*)$ ]]; then
  1208. [[ $cur == *{* ]] && local suffix=} || local suffix=;
  1209. COMPREPLY+=($( compgen -P ${BASH_REMATCH[1]} -S "$suffix" -v -- "${BASH_REMATCH[2]}" ));
  1210. return 0;
  1211. fi;
  1212. return 1
  1213. }
  1214. _xfunc ()
  1215. {
  1216. set -- "$@";
  1217. local srcfile=$1;
  1218. shift;
  1219. declare -F $1 &>/dev/null || {
  1220. local compdir=./completions;
  1221. [[ $BASH_SOURCE == */* ]] && compdir="${BASH_SOURCE%/*}/completions";
  1222. . "$compdir/$srcfile"
  1223. };
  1224. "$@"
  1225. }
  1226. _xinetd_services ()
  1227. {
  1228. local xinetddir=/etc/xinetd.d;
  1229. if [[ -d $xinetddir ]]; then
  1230. local restore_nullglob=$(shopt -p nullglob);
  1231. shopt -s nullglob;
  1232. local -a svcs=($( printf '%s\n' $xinetddir/!($_backup_glob) ));
  1233. $restore_nullglob;
  1234. COMPREPLY+=($( compgen -W '${svcs[@]#$xinetddir/}' -- "$cur" ));
  1235. fi
  1236. }
  1237. dequote ()
  1238. {
  1239. eval printf %s "$1" 2> /dev/null
  1240. }
  1241. quote ()
  1242. {
  1243. local quoted=${1//\'/\'\\\'\'};
  1244. printf "'%s'" "$quoted"
  1245. }
  1246. quote_readline ()
  1247. {
  1248. local quoted;
  1249. _quote_readline_by_ref "$1" ret;
  1250. printf %s "$ret"
  1251. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement