Kali Linux 使用 Bash 命令“set”显示奇怪的代码行

Kali Linux 使用 Bash 命令“set”显示奇怪的代码行

我安装了 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 初始化文件中删除即可。

相关内容