我安装了 Kali8 - 它是一个基于 Debian/GNU Linux(“wheezy”)的发行版 - 当我使用 Bash 内置命令“set”从 X 检查我的变量时,就像在 LXterminal 中一样,一切正常,但是当我通过控制台 VT 或 SSH/Putty 登录来完成此操作,我得到一些变量,然后是一堆代码行 - 数千行,看起来像是来自某种完成脚本。
另一件事是,在我看来,几周前系统刚安装时,列表较短,而且线路数量逐渐增多,因此随着时间的推移,列表会变长。该列表始终具有应在开头的实际变量和在末尾的相同代码行,因此我假设添加的行位于中间。为了验证最后一个,我将把列表通过管道传输到一个文件,然后在几天内再次执行此操作,看看大小是否变大。
无论如何,有人知道为什么或如何解决打印数千行未知脚本代码的事实吗?
这是一个例子:
root@kali:~# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:interactive_comments:$
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="2" [2]="37" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='4.2.37(1)-release'
COLUMNS=80
COMP_WORDBREAKS=$' \t\n"\'>=;|&(:'
DIRSTACK=()
EUID=0
GROUPS=()
HISTFILE=/root/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOSTNAME=kali
HOSTTYPE=x86_64
IFS=$' \t\n'
LANG=en_US.UTF-8
LIBGL_DRIVERS_PATH=/usr/lib32/dri:/usr/lib64/dri
LINES=24
LOGNAME=root
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;$
LS_OPTIONS='--color=auto -F'
MACHTYPE=x86_64-pc-linux-gnu
MAIL=/var/mail/root
MAILCHECK=60
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PIPESTATUS=([0]="1" [1]="0")
PPID=10987
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS4='+ '
PWD=/root
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_CLIENT='192.168.10.143 10827 22'
SSH_CONNECTION='192.168.10.143 10827 192.168.10.104 22'
SSH_TTY=/dev/pts/1
TERM=xterm
UID=0
USER=root
XDG_SESSION_COOKIE=fb89d5d02d263ebdcf49f3a551dccb8b-1374307938.708154-385548377
_=
__colormgr_commandlist=$'\n create-device\n create-profile\n delete-device\n delete-p$
__git_all_commands=
__git_diff_common_options=$'--stat --numstat --shortstat --summary\n\t\t\t--patch-with-stat --nam$
__git_fetch_options=$'\n\t--quiet --verbose --append --upload-pack --force --keep --depth=\n\t--t$
__git_log_common_options=$'\n\t--not --all\n\t--branches --tags --remotes\n\t--first-parent --mer$
__git_log_date_formats='relative iso8601 rfc2822 short local default raw'
__git_log_pretty_formats='oneline short medium full fuller email raw format:'
__git_log_shortlog_options=$'\n\t--author= --committer= --grep=\n\t--all-match\n'
__git_merge_options=$'\n\t--no-commit --no-stat --log --no-log --squash --strategy\n\t--commit --$
__git_merge_strategies=
__git_mergetools_common=$'diffuse ecmerge emerge kdiff3 meld opendiff\n\t\t\ttkdiff vimdiff gvimd$
__git_porcelain_commands=
__git_send_email_confirm_options='always never auto cc compose'
__git_send_email_suppresscc_options='author self cc bodycc sob cccmd body all'
__git_whitespacelist='nowarn warn error error-all fix'
__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))"$
__colormgrcomp ()
{
local all c s='
' IFS=' '' ''
';
local cur="${COMP_WORDS[COMP_CWORD]}";
if [ $# -gt 2 ]; then
fi;
for c in $1;
do
case "$c$4" in
*.)
all="$all$c$4$s"
;;
*)
all="$all$c$4 $s"
;;
esac;
done;
IFS=$s;
COMPREPLY=($(compgen -P "$2" -W "$all" -- "$cur"));
return
}
__dconf ()
{
local choices;
...
********... thousands of lins after... **********
...
{
local userland=$( uname -s );
[[ $userland == @(Linux|GNU/*) ]] && userland=GNU;
[[ $userland == $1 ]]
}
_variables ()
{
if [[ $cur =~ ^(\$\{?)([A-Za-z0-9_]*)$ ]]; then
[[ $cur == *{* ]] && local suffix=} || local suffix=;
COMPREPLY+=($( compgen -P ${BASH_REMATCH[1]} -S "$suffix" -v -- "${BASH_REMAT$
return 0;
fi;
return 1
}
_xfunc ()
{
set -- "$@";
local srcfile=$1;
shift;
declare -F $1 &>/dev/null || {
local compdir=./completions;
[[ $BASH_SOURCE == */* ]] && compdir="${BASH_SOURCE%/*}/completions";
. "$compdir/$srcfile"
};
"$@"
}
_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
}
quote ()
{
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
quote_readline ()
{
local quoted;
_quote_readline_by_ref "$1" ret;
printf %s "$ret"
}
root@kali:~#
PS:顺便说一句,可能与主题无关,上面的行应该是COMP_WORDBREAKS=$' \t\n"\'><=;|&(:'
,但我不得不从中删除<
,因为它似乎与 StackExchange MarkDown 和 HTML 混淆......如果我将这一完整行输入到上面的行,它实际上在之后显示为 /dev/null >
,并且它将阻止它之后的大部分剩余行显示在我的帖子上......嗯......奇怪。
答案1
bash 补全使用定义的函数。在 Debian 中,文件/etc/bash_completion
被获取,然后源文件中的所有文件/etc/bash_completion.d
。某些命令行应用程序会安装新的完成文件。git
你的输出就是一个很好的例子。它允许您选项卡完成诸如git che[TAB]
获取之类的事情git checkout
。如果您不想要高级完成,只需. /etc/bash_completion
从 shell 初始化文件中删除即可。