Giter Site home page Giter Site logo

Comments (23)

R3dy avatar R3dy commented on May 26, 2024

This is why it is recommend to use WSL instead of Cygwin. Cygwin python + Windows path doesn't play well together.

TLDR you need to create a .bat file somewhere inside the Windows PATH called ansible-playbook.bat with the following contents

@echo off

REM If you used the stand Cygwin installer this will be C:cygwin
set CYGWIN=%USERPROFILE%.babuncygwin

REM You can switch this to work with bash with %CYGWIN%binbash.exe
set SH=%CYGWIN%binzsh.exe

"%SH%" -c "/bin/ansible-playbook %*"

Check this out for more context
https://www.azavea.com/blog/2014/10/30/running-vagrant-with-ansible-provisioning-on-windows/

from capsulecorp-pentest.

jbyle avatar jbyle commented on May 26, 2024

Hello,

I tried a couple of things. So first CyGwin failed. I noticed in the batch file it was mentioning babuncygwin so I decided to try to install Babun (after removal of CyGwin). I did an install of Babun but at the end the install failed :

za  2 mei 2020 14:30:25
Installing plugin's home [dist]
Installing plugin's home [core]
WARNING: Git push strategy set to  which is unsupported - changing to 'matching'
Installing plugin's home [cygfix]
Installing plugin's home [shell]
Installing plugin's home [pact]
Installing plugin's home [cacert]
Installing plugin's home [oh-my-zsh]
Checking out files: 100% (453/453), done.
HEAD is now at 599831b Merge pull request #4058 from ncanceill/plugin-git
Error on or near line 25, last command 'zsh -c "source ~/.zshrc; rm -f \"$homedir/.zcompdump\"; compinit -u" &> /dev/null';
[babun] Terminating due to internal error #1

I noticed that Babun is not supported anymore.

from capsulecorp-pentest.

R3dy avatar R3dy commented on May 26, 2024

Is there a reason you don’t want to try installing Ubuntu with WSL? This would be the preferred method as Cygwin is iffy.

from capsulecorp-pentest.

jbyle avatar jbyle commented on May 26, 2024

What do you mean with Ubuntu with WSL ? I have a Windows 10 machine.

from capsulecorp-pentest.

R3dy avatar R3dy commented on May 26, 2024

Windows 10 now comes with Ubuntu!

https://docs.microsoft.com/en-us/windows/wsl/install-win10

Read that for more information. The first link I gave you has a tutorial for installing ansible inside Ubuntu (inside windows). This should work better than Cygwin.

from capsulecorp-pentest.

jbyle avatar jbyle commented on May 26, 2024

oh, what a nice feature in Windows 10 :-) Didn't know that existed. I just installed Ubuntu as you mentioned. So in short. I now install virtualbox, vagrant and ansible on the Ubuntu ? I have VirtualBox and Vagrant already on my Windows 10 but I suppose I should install it on Ubuntu ?

from capsulecorp-pentest.

R3dy avatar R3dy commented on May 26, 2024

Perfect.

My understanding is that Vagrant needs to be installed within WSL but VirtualBox can live in Windows you just need to configure Vagrant properly.

This appears to be a guide to doing exactly what we want. I’m sorry I didn’t find it earlier or I would have suggested it from the start.

https://alchemist.digital/articles/vagrant-ansible-and-virtualbox-on-wsl-windows-subsystem-for-linux/

from capsulecorp-pentest.

jbyle avatar jbyle commented on May 26, 2024

Hello,

I have completely set up WSL now and did the configurations.
Now when running vagrant, it complains it does not run with the same user (as VirtualBox on my Windows machine) which is correct. Where do I configure this ? I suppose in the Vagrantfile but I have no experience with Vagrant.

See console log here under.

jan@DESKTOP-1N7FUNG:/mnt/d/Jan/Pentesting/capsulecorp-pentest$ vagrant up goku
/opt/vagrant/embedded/gems/2.2.7/gems/vagrant-2.2.7/lib/vagrant/util/which.rb:37: warning: Insecure world writable dir /home/jan/.local/bin in PATH, mode 040777
The VirtualBox VM was created with a user that doesn't match the
current user running Vagrant. VirtualBox requires that the same user
be used to manage the VM that was created. Please re-run Vagrant with
that user. This is not a Vagrant issue.

The UID used to create the VM was: 0
Your UID is: 1000

from capsulecorp-pentest.

R3dy avatar R3dy commented on May 26, 2024

This looks like you sudo ran something so your VMs are owned by root. You need to locate the directory where they are contained and change the ownership of the directory recursively using the chown command

Alternatively you could just delete them and recreate them with vagrant destroy and then rerun vagrant up.

I think you’re close!

from capsulecorp-pentest.

jbyle avatar jbyle commented on May 26, 2024

Hi again,

I really appreciate your help. Many thanks for your patience.
I have no experience with Vagrant nor ansible. In the past I made some vm's with VirtualBox with the GUI. So probably some of my questions will sound silly but that is because of the lack of experience.

So I am further now and getting closer :-)
I removed the .vagrant folder. and than did the "vagrant up goku" again with more success but still an issue. See console log here under.
I also see on the Virtubal box (Windows) that a vm is created which is good to and indicates the linke betweens wsl vagrant and Window VirtualBox is working

jan@DESKTOP-1N7FUNG:/mnt/d/Jan/Pentesting/capsulecorp-pentest$ vagrant up goku
/opt/vagrant/embedded/gems/2.2.7/gems/vagrant-2.2.7/lib/vagrant/util/which.rb:37: warning: Insecure world writable dir /home/jan/.local/bin in PATH, mode 040777
Bringing machine 'goku' up with 'virtualbox' provider...
==> goku: Importing base box 'royce/capsulecorp-winsrv'...
==> goku: Matching MAC address for NAT networking...
==> goku: Checking if box 'royce/capsulecorp-winsrv' version '0.0.5-alpha' is up to date...
==> goku: There was a problem while downloading the metadata for your box
==> goku: to check for updates. This is not an error, since it is usually due
==> goku: to temporary network problems. This is just a warning. The problem
==> goku: encountered was:
==> goku:
==> goku: Failed to connect to vagrantcloud.com port 443: Connection refused
==> goku:
==> goku: If you want to check for box updates, verify your network connection
==> goku: is valid and try again.
==> goku: Setting the name of the VM: capsulecorp-pentest_goku_1588446286243_7502
==> goku: Clearing any previously set network interfaces...
==> goku: Preparing network interfaces based on configuration...
    goku: Adapter 1: nat
    goku: Adapter 2: hostonly
==> goku: Forwarding ports...
    goku: 3389 (guest) => 3389 (host) (adapter 1)
    goku: 5985 (guest) => 55985 (host) (adapter 1)
    goku: 5986 (guest) => 55986 (host) (adapter 1)
    goku: 22 (guest) => 2222 (host) (adapter 1)
==> goku: Booting VM...
==> goku: Waiting for machine to boot. This may take a few minutes...
    goku: WinRM address: 127.0.0.1:55985
    goku: WinRM username: vagrant
    goku: WinRM execution_time_limit: PT2H
    goku: WinRM transport: negotiate
==> goku: Machine booted and ready!
==> goku: Checking for guest additions in VM...
    goku: The guest additions on this VM do not match the installed version of
    goku: VirtualBox! In most cases this is fine, but in rare cases it can
    goku: prevent things such as shared folders from working properly. If you see
    goku: shared folder errors, please make sure the guest additions within the
    goku: virtual machine match the version of VirtualBox you have installed on
    goku: your host and reload your VM.
    goku:
    goku: Guest Additions Version: 6.0.18
    goku: VirtualBox Version: 5.2
==> goku: Configuring and enabling network interfaces...
==> goku: Mounting shared folders...
    goku: /vagrant => /mnt/d/Jan/Pentesting/capsulecorp-pentest
==> goku: Running provisioner: ansible...
Vagrant has automatically selected the compatibility mode '2.0'
according to the Ansible version installed (2.9.7).

Alternatively, the compatibility mode can be specified in your Vagrantfile:
https://www.vagrantup.com/docs/provisioning/ansible_common.html#compatibility_mode

    goku: Running ansible-playbook...

PLAY [goku] ********************************************************************

TASK [Gathering Facts] *********************************************************
fatal: [goku]: FAILED! => {"msg": "winrm or requests is not installed: No module named winrm"}

PLAY RECAP *********************************************************************
goku                       : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

from capsulecorp-pentest.

R3dy avatar R3dy commented on May 26, 2024

This is great. Looks like it’s all working. That error means your missing pywinrm which needs to be installed via pip.

https://github.com/R3dy/capsulecorp-pentest/wiki/MacOS-Setup-Guide

Check the ansible section

from capsulecorp-pentest.

jbyle avatar jbyle commented on May 26, 2024

Here is the console of the provision part of goku. Is this the expected result ?
Took a very long time to complete.

jan@DESKTOP-1N7FUNG:/mnt/d/Jan/Pentesting/capsulecorp-pentest$ vagrant provision goku
/opt/vagrant/embedded/gems/2.2.7/gems/vagrant-2.2.7/lib/vagrant/util/which.rb:37: warning: Insecure world writable dir /home/jan/.local/bin in PATH, mode 040777
==> goku: Running provisioner: ansible...
Vagrant has automatically selected the compatibility mode '2.0'
according to the Ansible version installed (2.9.7).

Alternatively, the compatibility mode can be specified in your Vagrantfile:
https://www.vagrantup.com/docs/provisioning/ansible_common.html#compatibility_mode

    goku: Running ansible-playbook...

PLAY [goku] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [goku]

TASK [promotedc : Change hostname to goku] *************************************
changed: [goku]

TASK [promotedc : Install Active Directory Services] ***************************
changed: [goku]

TASK [promotedc : Promote goku to domain controller] ***************************
changed: [goku]

TASK [promotedc : Reboot after promotion and wait for "Applying computer settings" to finish] ***
fatal: [goku]: FAILED! => {"changed": false, "elapsed": 1215, "msg": "Timed out waiting for post-reboot test command (timeout=600)", "rebooted": true}

PLAY RECAP *********************************************************************
goku                       : ok=4    changed=3    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

from capsulecorp-pentest.

R3dy avatar R3dy commented on May 26, 2024

Yes try to rerun the provision.

What's happening is after promoting the server to a DC it hangs on reboot sometimes for a really long time.

I haven't figured out a proper way to verify that the reboot is complete so I put a 600 second timeout. sometimes it works sometimes it doesn't but if you retry vagrant provision goku maybe 1 or 2 more times it should work.

Once Goku is up the other servers should come up without issues

from capsulecorp-pentest.

jbyle avatar jbyle commented on May 26, 2024

Hello,

I am having the following error now when launching gohan. I suppose I need to create a Vagrant account to solve this ?

What is the warning (first line) ?

jan@DESKTOP-1N7FUNG:/mnt/d/Jan/Pentesting/capsulecorp-pentest$ vagrant up gohan
/opt/vagrant/embedded/gems/2.2.7/gems/vagrant-2.2.7/lib/vagrant/util/which.rb:37: warning: Insecure world writable dir /home/jan/.local/bin in PATH, mode 040777
Bringing machine 'gohan' up with 'virtualbox' provider...
==> gohan: Box 'royce/capsulecorp-winsrv' could not be found. Attempting to find and install...
    gohan: Box Provider: virtualbox
    gohan: Box Version: 0.0.7-alpha-dc-member
The box 'royce/capsulecorp-winsrv' could not be found or
could not be accessed in the remote catalog. If this is a private
box on HashiCorp's Vagrant Cloud, please verify you're logged in via
`vagrant login`. Also, please double-check the name. The expanded
URL and error message are shown below:

URL: ["https://vagrantcloud.com/royce/capsulecorp-winsrv"]
Error: Failed to connect to vagrantcloud.com port 443: Connection refused

from capsulecorp-pentest.

R3dy avatar R3dy commented on May 26, 2024

You do not need an account to download the VM it’s public. In fact the same URL was already used to download Goku.

This is either an error with Vagrant’s external web server. In that case I would say just keep trying until it succeeds.

Or an error on your side blocking the request which would be strange since it worked once before.

What if you just try the URL in a browser?

from capsulecorp-pentest.

jbyle avatar jbyle commented on May 26, 2024

Hello,

https://vagrantcloud.com/royce/capsulecorp-winsrv via the browser works. But I notice dns changed it to https://app.vagrantup.com/royce/boxes/capsulecorp-winsrv . But I cannot even ping to both hostnames in Ubuntu. I am able to ping www.google.com so I can get out with requests. So I cannot connect to that URL. I already tried many times.
It is strange.

from capsulecorp-pentest.

jbyle avatar jbyle commented on May 26, 2024

Just did another test for troubleshooting. I launched an Amazon aws Ubunu server 18:04 and did a curl. Both respond. So on the WLS Ubuntu there is an access issue when trying to contact https://app.vagrantup.com/royce/boxes/capsulecorp-winsrv but as I said in previous post. I am able to do a curl to www.google.com. So it smells an access issue from the Ubuntu terminal towards vagrantcloud.com.

from capsulecorp-pentest.

jbyle avatar jbyle commented on May 26, 2024

Now that I brought up Amazon AWS. Would it be a interesting plan B to set up an Ubuntu server on Amazon to launch the VM's ? If positive, what amount of diskspace would I have to foresee to run all the vm's ? Are we talking about 20GB or 30GB ?

from capsulecorp-pentest.

R3dy avatar R3dy commented on May 26, 2024

Can you post the contents your ~/.bashrc file here

Also post the contents of set

use three ticks "```" to place them inside code tags

like this

from capsulecorp-pentest.

jbyle avatar jbyle commented on May 26, 2024

Hello, here is the .bashrc

jan@DESKTOP-1N7FUNG:~$ cat .bashrc

# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
export PATH="${PATH}:/home/jan/.local/bin"
export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"
export PATH="${PATH}:/mnt/c/Program Files/Oracle/VirtualBox" ```

from capsulecorp-pentest.

R3dy avatar R3dy commented on May 26, 2024

Could you also post the result of the set command Trying to see if you have a HTTP_PROXY var set somewhere, that could cause the behavior you're experiencing.

from capsulecorp-pentest.

jbyle avatar jbyle commented on May 26, 2024

Here is the set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_VERSINFO=([0]="2" [1]="8")
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="4" [2]="20" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='4.4.20(1)-release'
COLUMNS=120
DIRSTACK=()
EUID=1000
GROUPS=()
HISTCONTROL=ignoreboth
HISTFILE=/home/jan/.bash_history
HISTFILESIZE=2000
HISTSIZE=1000
HOME=/home/jan
HOSTNAME=DESKTOP-1N7FUNG
HOSTTYPE=x86_64
IFS=$' \t\n'
LANG=C.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
LESSOPEN='| /usr/bin/lesspipe %s'
LINES=30
LOGNAME=jan
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;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:.tar=01;31:.tgz=01;31:.arc=01;31:.arj=01;31:.taz=01;31:.lha=01;31:.lz4=01;31:.lzh=01;31:.lzma=01;31:.tlz=01;31:.txz=01;31:.tzo=01;31:.t7z=01;31:.zip=01;31:.z=01;31:.Z=01;31:.dz=01;31:.gz=01;31:.lrz=01;31:.lz=01;31:.lzo=01;31:.xz=01;31:.zst=01;31:.tzst=01;31:.bz2=01;31:.bz=01;31:.tbz=01;31:.tbz2=01;31:.tz=01;31:.deb=01;31:.rpm=01;31:.jar=01;31:.war=01;31:.ear=01;31:.sar=01;31:.rar=01;31:.alz=01;31:.ace=01;31:.zoo=01;31:.cpio=01;31:.7z=01;31:.rz=01;31:.cab=01;31:.wim=01;31:.swm=01;31:.dwm=01;31:.esd=01;31:.jpg=01;35:.jpeg=01;35:.mjpg=01;35:.mjpeg=01;35:.gif=01;35:.bmp=01;35:.pbm=01;35:.pgm=01;35:.ppm=01;35:.tga=01;35:.xbm=01;35:.xpm=01;35:.tif=01;35:.tiff=01;35:.png=01;35:.svg=01;35:.svgz=01;35:.mng=01;35:.pcx=01;35:.mov=01;35:.mpg=01;35:.mpeg=01;35:.m2v=01;35:.mkv=01;35:.webm=01;35:.ogm=01;35:.mp4=01;35:.m4v=01;35:.mp4v=01;35:.vob=01;35:.qt=01;35:.nuv=01;35:.wmv=01;35:.asf=01;35:.rm=01;35:.rmvb=01;35:.flc=01;35:.avi=01;35:.fli=01;35:.flv=01;35:.gl=01;35:.dl=01;35:.xcf=01;35:.xwd=01;35:.yuv=01;35:.cgm=01;35:.emf=01;35:.ogv=01;35:.ogx=01;35:.aac=00;36:.au=00;36:.flac=00;36:.m4a=00;36:.mid=00;36:.midi=00;36:.mka=00;36:.mp3=00;36:.mpc=00;36:.ogg=00;36:.ra=00;36:.wav=00;36:.oga=00;36:.opus=00;36:.spx=00;36:.xspf=00;36:'
MACHTYPE=x86_64-pc-linux-gnu
MAILCHECK=60
NAME=DESKTOP-1N7FUNG
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH='/home/jan/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files/WindowsApps/CanonicalGroupLimited.Ubuntu18.04onWindows_1804.2020.423.0_x64__79rhkp1fndgsc:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/c/Program Files/Intel/WiFi/bin/:/mnt/c/Program Files/Common Files/Intel/WirelessCommon/:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program Files (x86)/Common Files/Acronis/VirtualFile/:/mnt/c/Program Files (x86)/Common Files/Acronis/VirtualFile64/:/mnt/c/Program Files (x86)/Common Files/Acronis/FileProtector/:/mnt/c/Program Files (x86)/Common Files/Acronis/FileProtector64/:/mnt/c/Program Files (x86)/Common Files/Acronis/SnapAPI/:/mnt/c/Program Files/NVIDIA Corporation/NVIDIA NvDLISR:/mnt/c/Program Files/PuTTY/:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/Oracle/VirtualBox:/mnt/c/cygwin64/bin:/mnt/c/Users/Jan/AppData/Local/Microsoft/WindowsApps:/snap/bin:/home/jan/.local/bin:/mnt/c/Program Files/Oracle/VirtualBox'
PIPESTATUS=([0]="0")
PPID=7
PS1='[\e]0;\u@\h: \w\a]${debian_chroot:+($debian_chroot)}[\033[01;32m]\u@\h[\033[00m]:[\033[01;34m]\w[\033[00m]$ '
PS2='> '
PS4='+ '
PWD=/home/jan
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
TERM=xterm-256color
UID=1000
USER=jan
VAGRANT_WSL_ENABLE_WINDOWS_ACCESS=1
WSLENV=
WSL_DISTRO_NAME=Ubuntu-18.04
WSL_INTEGRATION_CACHE=/home/jan/.cache/wslu/integration
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
_=clear
__git_printf_supports_v=yes
_backup_glob='@(##|@(|.@(bak|orig|rej|swp|dpkg*|rpm@(orig|new|save))))'
_xspecs=([freeamp]="!.@(mp3|og[ag]|pls|m3u)" [bibtex]="!.aux" [lualatex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [chromium-browser]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL])|[pP][dD][fF])" [tex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [zathura]="!.@(cb[rz7t]|djv?(u)|?(e)ps|pdf)" [lrunzip]="!.lrz" [amaya]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [hbpp]="!.@([Pp][Rr][Gg]|[Cc][Ll][Pp])" [lzgrep]="!.@(tlz|lzma)" [ggv]="!.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))" [lzless]="!.@(tlz|lzma)" [loimpress]="!.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)" [kdvi]="!.@(dvi|DVI)?(.@(gz|Z|bz2))" [lobase]="!.odb" [lbzcat]="!.?(t)bz?(2)" [lilypond]="!.ly" [sxemacs]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [epdfview]="!.pdf" [localc]="!.@(sxc|stc|xls?([bmx])|xlw|xlt?([mx])|[ct]sv|?(f)ods|ots)" [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)" [lbunzip2]="!.?(t)bz?(2)" [ps2pdf13]="!.@(?(e)ps|pdf)" [ps2pdf14]="!.@(?(e)ps|pdf)" [lzfgrep]="!.@(tlz|lzma)" [hbrun]="!.[Hh][Rr][Bb]" [kbabel]="!.po" [rview]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [kaffeine]="!@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|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|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|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?(2)|j2[ck]|jp[2f]|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|?(e)ps)" [rgvim]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [oodraw]="!.@(sxd|std|sda|sdd|?(f)odg|otg)" [elinks]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [playmidi]="!.@(mid?(i)|cmf)" [xine]="!@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|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|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|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]="!.@(pdf|fdf)?(.@(gz|GZ|bz2|BZ2|Z))" [aviplay]="!.@(avi|asf|wmv)" [latex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [lodraw]="!.@(sxd|std|sda|sdd|?(f)odg|otg)" [rvim]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [ogg123]="!.@(og[ag]|m3u|flac|spx)" [ps2pdfwr]="!.@(?(e)ps|pdf)" [harbour]="!.@([Pp][Rr][Gg]|[Cc][Ll][Pp])" [lomath]="!.@(sxm|smf|mml|odf)" [xemacs]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [unlzma]="!.@(tlz|lzma)" [lowriter]="!.@(sxw|stw|sxg|sgl|doc?([mx])|dot?([mx])|rtf|txt|htm|html|?(f)odt|ott|odm|pdf)" [vi]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [xetex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [gvim]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [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)" [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]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [fbxine]="!@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|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|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|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)" [kpdf]="!.@(?(e)ps|pdf)" [oomath]="!.@(sxm|smf|mml|odf)" [compress]=".Z" [iceweasel]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL])|[pP][dD][fF])" [zcat]="!.@(Z|[gGd]z|t[ag]z)" [unzip]="!.@(zip|[egjsw]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|ipa|do[ct][xm]|p[op]t[mx]|xl[st][xm]|pyz)" [modplug123]="!.@(669|abc|am[fs]|d[bs]m|dmf|far|it|mdl|m[eo]d|mid?(i)|mt[2m]|oct|okt?(a)|p[st]m|s[3t]m|ult|umx|wav|xm)" [dvipdfm]="!.dvi" [oobase]="!.odb" [zipinfo]="!.@(zip|[egjsw]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|ipa|do[ct][xm]|p[op]t[mx]|xl[st][xm]|pyz)" [epiphany]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [galeon]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [bzme]="!.@(zip|z|gz|tgz)" [xfig]="!.fig" [xdvi]="!.@(dvi|DVI)?(.@(gz|Z|bz2))" [cdiff]="!.@(dif?(f)|?(d)patch)?(.@([gx]z|bz2|lzma))" [rgview]=".@([ao]|so|so.!(conf|/)|[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|pdf)" [netscape]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [acroread]="!.[pf]df" [makeinfo]="!.texi" [kwrite]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [gview]=".@([ao]|so|so.!(conf|/)|[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)" [bzcat]="!.?(t)bz?(2)" [pdftex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [rpm2cpio]="!.[rs]pm" [view]=".@([ao]|so|so.!(conf|/)|[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]|oct|okt?(a)|p[st]m|s[3t]m|ult|umx|wav|xm)" [dillo]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [aaxine]="!@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|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|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|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" [lzmore]="!.@(tlz|lzma)" [poedit]="!.po" [firefox]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL])|[pP][dD][fF])" [gv]="!.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))" [madplay]="!.mp3" [gtranslator]="!.po" [jadetex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [gpdf]="!.[pf]df" [kghostview]="!.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))" [pbzcat]="!.?(t)bz?(2)" [lzcat]="!.@(tlz|lzma)" [vim]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [dvips]="!.dvi" [pdfunite]="!.pdf" [dvitype]="!.dvi" [realplay]="!.@(rm?(j)|ra?(m)|smi?(l))" [gqmpeg]="!.@(mp3|og[ag]|pls|m3u)" [xelatex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [lzegrep]="!.@(tlz|lzma)" [bunzip2]="!.?(t)bz?(2)" [znew]=".Z" [lokalize]="!.po" [kate]=".@([ao]|so|so.!(conf|/)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)" [dragon]="!@(.@(mp?(e)g|MP?(E)G|wm[av]|WM[AV]|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|web[am]|WEB[AM]|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|mkv|MKV|og[agmvx]|OG[AGMVX]|t[ps]|T[PS]|m2t?(s)|M2T?(S)|mts|MTS|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)" [pdflatex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [mozilla-firefox]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL])|[pP][dD][fF])" [ooimpress]="!.@(sxi|sti|pps?(x)|ppt?([mx])|pot?([mx])|?(f)odp|otp)" [uncompress]="!.Z" [unpigz]="!.@(Z|[gGdz]z|t[ag]z)" [luatex]="!.@(?(la)tex|texi|dtx|ins|ltx|dbj)" [lynx]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL]))" [ps2pdf]="!.@(?(e)ps|pdf)" [mpg321]="!.mp3" [mpg123]="!.mp3" [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])" [texi2html]="!.texi" [gunzip]="!.@(Z|[gGd]z|t[ag]z)" [google-chrome]="!.@(?([xX]|[sS])[hH][tT][mM]?([lL])|[pP][dD][fF])" [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)" [xzcat]="!.@(?(t)xz|tlz|lzma)" [timidity]="!.@(mid?(i)|rmi|rcp|[gr]36|g18|mod|xm|it|x3m|s[3t]m|kar)" [dviselect]="!.dvi" )
snap_bin_path=/snap/bin
snap_xdg_path=/var/lib/snapd/desktop
__expand_tilde_by_ref ()
{
if [[ ${!1} == ~
]]; then
eval $1=$(printf %q "${!1#~}");
fi
}
__get_cword_at_cursor_by_ref ()
{
local cword words=();
__reassemble_comp_words_by_ref "$1" words cword;
local i cur index=$COMP_POINT lead=${COMP_LINE:0:$COMP_POINT};
if [[ $index -gt 0 && ( -n $lead && -n ${lead//[[:space:]]} ) ]]; then
cur=$COMP_LINE;
for ((i = 0; i <= cword; ++i ))
do
while [[ ${#cur} -ge ${#words[i]} && "${cur:0:${#words[i]}}" != "${words[i]}" ]]; do
cur="${cur:1}";
[[ $index -gt 0 ]] && ((index--));
done;
if [[ $i -lt $cword ]]; then
local old_size=${#cur};
cur="${cur#"${words[i]}"}";
local new_size=${#cur};
index=$(( index - old_size + new_size ));
fi;
done;
[[ -n $cur &amp;&amp; ! -n ${cur//[[:space:]]} ]] && cur=;
[[ $index -lt 0 ]] && index=0;
fi;
local "$2" "$3" "$4" && upvars -a${#words[@]} $2 "${words[@]}" -v $3 "$cword" -v $4 "${cur:0:$index}"
}
__git_eread ()
{
test -r "$1" && IFS='
' read "$2" < "$1"
}
__git_ps1 ()
{
local exit=$?;
local pcmode=no;
local detached=no;
local ps1pc_start='\u@\h:\w ';
local ps1pc_end='$ ';
local printf_format=' (%s)';
case "$#" in
2 | 3)
pcmode=yes;
ps1pc_start="$1";
ps1pc_end="$2";
printf_format="${3:-$printf_format}";
PS1="$ps1pc_start$ps1pc_end"
;;
0 | 1)
printf_format="${1:-$printf_format}"
;;
)
return $exit
;;
esac;
local ps1_expanded=yes;
[ -z "${ZSH_VERSION-}" ] || [[ -o PROMPT_SUBST ]] || ps1_expanded=no;
[ -z "${BASH_VERSION-}" ] || shopt -q promptvars || ps1_expanded=no;
local repo_info rev_parse_exit_code;
repo_info="$(git rev-parse --git-dir --is-inside-git-dir --is-bare-repository --is-inside-work-tree --short HEAD 2>/dev/null)";
rev_parse_exit_code="$?";
if [ -z "$repo_info" ]; then
return $exit;
fi;
local short_sha="";
if [ "$rev_parse_exit_code" = "0" ]; then
short_sha="${repo_info##

}";
repo_info="${repo_info%
}";
fi;
local inside_worktree="${repo_info##

}";
repo_info="${repo_info%
}";
local bare_repo="${repo_info##

}";
repo_info="${repo_info%
}";
local inside_gitdir="${repo_info##

}";
local g="${repo_info%
}";
if [ "true" = "$inside_worktree" ] && [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED-}" ] && [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] && git check-ignore -q .; then
return $exit;
fi;
local r="";
local b="";
local step="";
local total="";
if [ -d "$g/rebase-merge" ]; then
__git_eread "$g/rebase-merge/head-name" b;
__git_eread "$g/rebase-merge/msgnum" step;
__git_eread "$g/rebase-merge/end" total;
if [ -f "$g/rebase-merge/interactive" ]; then
r="|REBASE-i";
else
r="|REBASE-m";
fi;
else
if [ -d "$g/rebase-apply" ]; then
__git_eread "$g/rebase-apply/next" step;
__git_eread "$g/rebase-apply/last" total;
if [ -f "$g/rebase-apply/rebasing" ]; then
__git_eread "$g/rebase-apply/head-name" b;
r="|REBASE";
else
if [ -f "$g/rebase-apply/applying" ]; then
r="|AM";
else
r="|AM/REBASE";
fi;
fi;
else
if [ -f "$g/MERGE_HEAD" ]; then
r="|MERGING";
else
if [ -f "$g/CHERRY_PICK_HEAD" ]; then
r="|CHERRY-PICKING";
else
if [ -f "$g/REVERT_HEAD" ]; then
r="|REVERTING";
else
if [ -f "$g/BISECT_LOG" ]; then
r="|BISECTING";
fi;
fi;
fi;
fi;
fi;
if [ -n "$b" ]; then
:;
else
if [ -h "$g/HEAD" ]; then
b="$(git symbolic-ref HEAD 2>/dev/null)";
else
local head="";
if ! __git_eread "$g/HEAD" head; then
return $exit;
fi;
b="${head#ref: }";
if [ "$head" = "$b" ]; then
detached=yes;
b="$(
case "${GIT_PS1_DESCRIBE_STYLE-}" in
(contains)
git describe --contains HEAD ;;
(branch)
git describe --contains --all HEAD ;;
(tag)
git describe --tags HEAD ;;
(describe)
git describe HEAD ;;
(
| default)
git describe --tags --exact-match HEAD ;;
esac 2>/dev/null)" || b="$short_sha...";
b="($b)";
fi;
fi;
fi;
fi;
if [ -n "$step" ] && [ -n "$total" ]; then
r="$r $step/$total";
fi;
local w="";
local i="";
local s="";
local u="";
local c="";
local p="";
if [ "true" = "$inside_gitdir" ]; then
if [ "true" = "$bare_repo" ]; then
c="BARE:";
else
b="GIT_DIR!";
fi;
else
if [ "true" = "$inside_worktree" ]; then
if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] && [ "$(git config --bool bash.showDirtyState)" != "false" ]; then
git diff --no-ext-diff --quiet || w="";
git diff --no-ext-diff --cached --quiet || i="+";
if [ -z "$short_sha" ] && [ -z "$i" ]; then
i="#";
fi;
fi;
if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ] && git rev-parse --verify --quiet refs/stash > /dev/null; then
s="$";
fi;
if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] && [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] && git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/
' > /dev/null 2> /dev/null; then
u="%${ZSH_VERSION+%}";
fi;
if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
__git_ps1_show_upstream;
fi;
fi;
fi;
local z="${GIT_PS1_STATESEPARATOR-" "}";
if [ $pcmode = yes ] && [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
__git_ps1_colorize_gitstring;
fi;
b=${b##refs/heads/};
if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
__git_ps1_branch_name=$b;
b="${__git_ps1_branch_name}";
fi;
local f="$w$i$s$u";
local gitstring="$c$b${f:+$z$f}$r$p";
if [ $pcmode = yes ]; then
if [ "${__git_printf_supports_v-}" != yes ]; then
gitstring=$(printf -- "$printf_format" "$gitstring");
else
printf -v gitstring -- "$printf_format" "$gitstring";
fi;
PS1="$ps1pc_start$gitstring$ps1pc_end";
else
printf -- "$printf_format" "$gitstring";
fi;
return $exit
}
__git_ps1_colorize_gitstring ()
{
if [[ -n ${ZSH_VERSION-} ]]; then
local c_red='%F{red}';
local c_green='%F{green}';
local c_lblue='%F{blue}';
local c_clear='%f';
else
local c_red='[\e[31m]';
local c_green='[\e[32m]';
local c_lblue='[\e[1;34m]';
local c_clear='[\e[0m]';
fi;
local bad_color=$c_red;
local ok_color=$c_green;
local flags_color="$c_lblue";
local branch_color="";
if [ $detached = no ]; then
branch_color="$ok_color";
else
branch_color="$bad_color";
fi;
c="$branch_color$c";
z="$c_clear$z";
if [ "$w" = "" ]; then
w="$bad_color$w";
fi;
if [ -n "$i" ]; then
i="$ok_color$i";
fi;
if [ -n "$s" ]; then
s="$flags_color$s";
fi;
if [ -n "$u" ]; then
u="$bad_color$u";
fi;
r="$c_clear$r"
}
__git_ps1_show_upstream ()
{
local key value;
local svn_remote svn_url_pattern count n;
local upstream=git legacy="" verbose="" name="";
svn_remote=();
local output="$(git config -z --get-regexp '^(svn-remote..
.url|bash.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')";
while read -r key value; do
case "$key" in
bash.showupstream)
GIT_PS1_SHOWUPSTREAM="$value";
if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then
p="";
return;
fi
;;
svn-remote..url)
svn_remote[$((${#svn_remote[@]} + 1))]="$value";
svn_url_pattern="$svn_url_pattern\|$value";
upstream=svn+git
;;
esac;
done <<< "$output";
for option in ${GIT_PS1_SHOWUPSTREAM};
do
case "$option" in
git | svn)
upstream="$option"
;;
verbose)
verbose=1
;;
legacy)
legacy=1
;;
name)
name=1
;;
esac;
done;
case "$upstream" in
git)
upstream="@{upstream}"
;;
svn
)
local -a svn_upstream;
svn_upstream=($(git log --first-parent -1 --grep="^git-svn-id: (${svn_url_pattern#??})" 2>/dev/null));
if [[ 0 -ne ${#svn_upstream[@]} ]]; then
svn_upstream=${svn_upstream[${#svn_upstream[@]} - 2]};
svn_upstream=${svn_upstream%@};
local n_stop="${#svn_remote[@]}";
for ((n=1; n <= n_stop; n++))
do
svn_upstream=${svn_upstream#${svn_remote[$n]}};
done;
if [[ -z "$svn_upstream" ]]; then
upstream=${GIT_SVN_ID:-git-svn};
else
upstream=${svn_upstream#/};
fi;
else
if [[ "svn+git" = "$upstream" ]]; then
upstream="@{upstream}";
fi;
fi
;;
esac;
if [[ -z "$legacy" ]]; then
count="$(git rev-list --count --left-right "$upstream"...HEAD 2>/dev/null)";
else
local commits;
if commits="$(git rev-list --left-right "$upstream"...HEAD 2>/dev/null)"; then
local commit behind=0 ahead=0;
for commit in $commits;
do
case "$commit" in
"<"
)
((behind++))
;;
)
((ahead++))
;;
esac;
done;
count="$behind $ahead";
else
count="";
fi;
fi;
if [[ -z "$verbose" ]]; then
case "$count" in
"")
p=""
;;
"0 0")
p="="
;;
"0 "
)
p=">"
;;
*" 0")
p="<"
;;
)
p="<>"
;;
esac;
else
case "$count" in
"")
p=""
;;
"0 0")
p=" u="
;;
"0 "
)
p=" u+${count#0 }"
;;
" 0")
p=" u-${count% 0}"
;;
)
p=" u+${count#
}-${count% }"
;;
esac;
if [[ -n "$count" && -n "$name" ]]; then
__git_ps1_upstream_name=$(git rev-parse --abbrev-ref "$upstream" 2>/dev/null);
if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
p="$p ${__git_ps1_upstream_name}";
else
p="$p ${__git_ps1_upstream_name}";
unset __git_ps1_upstream_name;
fi;
fi;
fi
}
__load_completion ()
{
local -a dirs=(${BASH_COMPLETION_USER_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion}/completions);
local OIFS=$IFS IFS=: dir cmd="${1##
/}" compfile;
for dir in ${XDG_DATA_DIRS:-/usr/local/share:/usr/share};
do
dirs+=($dir/bash-completion/completions);
done;
IFS=$OIFS;
if [[ $BASH_SOURCE == / ]]; then
dirs+=("${BASH_SOURCE%/
}/completions");
else
dirs+=(./completions);
fi;
for dir in "${dirs[@]}";
do
for compfile in "$cmd" "$cmd.bash" "
$cmd";
do
compfile="$dir/$compfile";
[[ -f "$compfile" ]] && . "$compfile" &> /dev/null && return 0;
done;
done;
[[ -n "${_xspecs[$cmd]}" ]] && complete -F _filedir_xspec "$cmd" && return 0;
return 1
}
__ltrim_colon_completions ()
{
if [[ "$1" == : && "$COMP_WORDBREAKS" == : ]]; then
local colon_word=${1%"${1##:}"};
local i=${#COMPREPLY[
]};
while [[ $((--i)) -ge 0 ]]; do
COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"};
done;
fi
}
__parse_options ()
{
local option option2 i IFS='
,/|';
option=;
local -a array;
read -a array <<< "$1";
for i in "${array[@]}";
do
case "$i" in
---)
break
;;
--?
)
option=$i;
break
;;
-?*)
[[ -n $option ]] || option=$i
;;
*)
break
;;
esac;
done;
[[ -n $option ]] || return;
IFS='
';
if [[ $option =
([((no|dont)-?)]). ]]; then
option2=${option/"${BASH_REMATCH[1]}"/};
option2=${option2%%[<{().[]};
printf '%s\n' "${option2/=
/=}";
option=${option/"${BASH_REMATCH[1]}"/"${BASH_REMATCH[2]}"};
fi;
option=${option%%[<{().[]};
printf '%s\n' "${option/=
/=}"
}
__reassemble_comp_words_by_ref ()
{
local exclude i j line ref;
if [[ -n $1 ]]; then
exclude="${1//[^$COMP_WORDBREAKS]}";
fi;
printf -v "$3" %s "$COMP_CWORD";
if [[ -n $exclude ]]; then
line=$COMP_LINE;
for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++))
do
while [[ $i -gt 0 &amp;&amp; ${COMP_WORDS[$i]} == +([$exclude]) ]]; do
[[ $line != [[:blank:]]* ]] && (( j >= 2 )) && ((j--));
ref="$2[$j]";
printf -v "$ref" %s "${!ref}${COMP_WORDS[i]}";
[[ $i == $COMP_CWORD ]] && printf -v "$3" %s "$j";
line=${line#"${COMP_WORDS[$i]}"};
[[ $line == [[:blank:]]
]] && ((j++));
(( $i &lt; ${#COMP_WORDS[@]} - 1)) && ((i++)) || break 2;
done;
ref="$2[$j]";
printf -v "$ref" %s "${!ref}${COMP_WORDS[i]}";
line=${line#"${COMP_WORDS[i]}"};
[[ $i == $COMP_CWORD ]] && printf -v "$3" %s "$j";
done;
[[ $i == $COMP_CWORD ]] && printf -v "$3" %s "$j";
else
for i in ${!COMP_WORDS[@]};
do
printf -v "$2[i]" %s "${COMP_WORDS[i]}";
done;
fi
}
_allowed_groups ()
{
if _complete_as_root; then
local IFS='
';
COMPREPLY=($( compgen -g -- "$1" ));
else
local IFS='
';
COMPREPLY=($( compgen -W "$( id -Gn 2>/dev/null || groups 2>/dev/null )" -- "$1" ));
fi
}
_allowed_users ()
{
if _complete_as_root; then
local IFS='
';
COMPREPLY=($( compgen -u -- "${1:-$cur}" ));
else
local IFS='
';
COMPREPLY=($( compgen -W "$( id -un 2>/dev/null || whoami 2>/dev/null )" -- "${1:-$cur}" ));
fi
}
_apport-bug ()
{
local cur dashoptions prev param;
COMPREPLY=();
cur=_get_cword;
prev=${COMP_WORDS[COMP_CWORD-1]};
dashoptions='-h --help --save -v --version --tag -w --window';
case "$prev" in
ubuntu-bug | apport-bug)
case "$cur" in
-
)
COMPREPLY=($( compgen -W "$dashoptions" -- $cur ))
;;
)
_apport_parameterless
;;
esac
;;
--save)
COMPREPLY=($( compgen -o default -G "$cur
" ))
;;
-w | --window)
dashoptions="--save --tag";
COMPREPLY=($( compgen -W "$dashoptions" -- $cur ))
;;
-h | --help | -v | --version | --tag)
return 0
;;
)
dashoptions="--tag";
if ! [[ "${COMP_WORDS[
]}" =
.--save. ]]; then
dashoptions="--save $dashoptions";
fi;
if ! [[ "${COMP_WORDS[]}" =~ .--window.* || "${COMP_WORDS[]}" =~ .\ -w\ .* ]]; then
dashoptions="-w --window $dashoptions";
fi;
case "$cur" in
-)
COMPREPLY=($( compgen -W "$dashoptions" -- $cur ))
;;
)
_apport_parameterless
;;
esac
;;
esac
}
_apport-cli ()
{
local cur dashoptions prev param;
COMPREPLY=();
cur=_get_cword;
prev=${COMP_WORDS[COMP_CWORD-1]};
dashoptions='-h --help -f --file-bug -u --update-bug -s --symptom
-c --crash-file --save -v --version --tag -w --window';
case "$prev" in
apport-cli)
case "$cur" in
-
)
COMPREPLY=($( compgen -W "$dashoptions" -- $cur ))
;;
)
_apport_parameterless
;;
esac
;;
-f | --file-bug)
param="-P --pid -p --package -s --symptom";
COMPREPLY=($( compgen -W "$param $(_apport_symptoms)" -- $cur))
;;
-s | --symptom)
COMPREPLY=($( compgen -W "$(_apport_symptoms)" -- $cur))
;;
--save)
COMPREPLY=($( compgen -o default -G "$cur
" ))
;;
-c | --crash-file)
COMPREPLY=($( compgen -G "${cur}
.apport"
compgen -G "${cur}.crash" ))
;;
-w | --window)
dashoptions="--save --tag";
COMPREPLY=($( compgen -W "$dashoptions" -- $cur ))
;;
-h | --help | -v | --version | --tag)
return 0
;;
)
dashoptions='--tag';
if ! [[ "${COMP_WORDS[
]}" =~ .
--save.* ]]; then
dashoptions="--save $dashoptions";
fi;
if ! [[ "${COMP_WORDS[]}" =~ .--window.* || "${COMP_WORDS[]}" =~ .\ -w\ .* ]]; then
dashoptions="-w --window $dashoptions";
fi;
if ! [[ "${COMP_WORDS[]}" =~ .--symptom.* || "${COMP_WORDS[]}" =~ .\ -s\ .* ]]; then
dashoptions="-s --symptom $dashoptions";
fi;
if ! [[ "${COMP_WORDS[]}" =~ .--update.* || "${COMP_WORDS[]}" =~ .\ -u\ .* ]]; then
dashoptions="-u --update $dashoptions";
fi;
if ! [[ "${COMP_WORDS[]}" =~ .--file-bug.* || "${COMP_WORDS[]}" =~ .\ -f\ .* ]]; then
dashoptions="-f --file-bug $dashoptions";
fi;
if ! [[ "${COMP_WORDS[]}" =~ .--crash-file.* || "${COMP_WORDS[]}" =~ .\ -c\ .* ]]; then
dashoptions="-c --crash-file $dashoptions";
fi;
case "$cur" in
-)
COMPREPLY=($( compgen -W "$dashoptions" -- $cur ))
;;
)
_apport_parameterless
;;
esac
;;
esac
}
_apport-collect ()
{
local cur prev;
COMPREPLY=();
cur=_get_cword;
prev=${COMP_WORDS[COMP_CWORD-1]};
case "$prev" in
apport-collect)
COMPREPLY=($( compgen -W "-p --package --tag" -- $cur))
;;
-p | --package)
COMPREPLY=($( apt-cache pkgnames $cur 2> /dev/null ))
;;
--tag)
return 0
;;
)
if [[ "${COMP_WORDS[
]}" =~ .
\ -p.
|| "${COMP_WORDS[]}" =~ .--package.* ]]; then
COMPREPLY=($( compgen -W "--tag" -- $cur));
else
COMPREPLY=($( compgen -W "-p --package --tag" -- $cur));
fi
;;
esac
}
_apport-unpack ()
{
local cur prev;
COMPREPLY=();
cur=_get_cword;
prev=${COMP_WORDS[COMP_CWORD-1]};
case "$prev" in
apport-unpack)
COMPREPLY=($( compgen -G "${cur}.apport"
compgen -G "${cur}
.crash" ))
;;
esac
}
_apport_parameterless ()
{
local param;
param="$dashoptions $( apt-cache pkgnames $cur 2&gt; /dev/null ) $( command ps axo pid | sed 1d ) $( _apport_symptoms ) $( compgen -G "${cur}" )";
COMPREPLY=($( compgen -W "$param" -- $cur))
}
apport_symptoms ()
{
local syms;
if [ -r /usr/share/apport/symptoms ]; then
for FILE in $(ls /usr/share/apport/symptoms);
do
if [[ ! "$FILE" =~ ^
.
&& -n $(egrep "^def run\s*(.):" /usr/share/apport/symptoms/$FILE) ]]; then
syms="$syms ${FILE%.py}";
fi;
done;
fi;
echo $syms
}
_available_interfaces ()
{
local PATH=$PATH:/sbin;
COMPREPLY=($( {
if [[ ${1:-} == -w ]]; then
iwconfig
elif [[ ${1:-} == -a ]]; then
ifconfig || ip link show up
else
ifconfig -a || ip link show
fi
} 2>/dev/null | awk '/^[^ \t]/ { if ($1 ~ /^[0-9]+:/) { print $2 } else { print $1 } }' ));
COMPREPLY=($( compgen -W '${COMPREPLY[@]/%[[:punct:]]/}' -- "$cur" ))
}
_cd ()
{
local cur prev words cword;
_init_completion || return;
local IFS='
' i j k;
compopt -o filenames;
if [[ -z "${CDPATH:-}" || "$cur" == ?(.)?(.)/
]]; then
_filedir -d;
return;
fi;
local -r mark_dirs=$(_rl_enabled mark-directories && echo y);
local -r mark_symdirs=$(_rl_enabled mark-symlinked-directories && echo y);
for i in ${CDPATH//:/'
'};
do
k="${#COMPREPLY[@]}";
for j in $( compgen -d -- $i/$cur );
do
if [[ ( -n $mark_symdirs && -h $j || -n $mark_dirs && ! -h $j ) &amp;&amp; ! -d ${j#$i/} ]]; then
j+="/";
fi;
COMPREPLY[k++]=${j#$i/};
done;
done;
_filedir -d;
if [[ ${#COMPREPLY[@]} -eq 1 ]]; then
i=${COMPREPLY[0]};
if [[ "$i" == "$cur" && $i != "/" ]]; then
COMPREPLY[0]="${i}/";
fi;
fi;
return
}
_cd_devices ()
{
COMPREPLY+=($( compgen -f -d -X "!
/?([amrs])cd*" -- "${cur:-/dev/}" ))
}
_command ()
{
local offset i;
offset=1;
for ((i=1; i <= COMP_CWORD; i++ ))
do
if [[ "${COMP_WORDS[i]}" != -* ]]; then
offset=$i;
break;
fi;
done;
_command_offset $offset
}
_command_offset ()
{
local word_offset=$1 i j;
for ((i=0; i < $word_offset; i++ ))
do
for ((j=0; j <= ${#COMP_LINE}; j++ ))
do
[[ "$COMP_LINE" == "${COMP_WORDS[i]}"* ]] && break;
COMP_LINE=${COMP_LINE:1};
((COMP_POINT--));
done;
COMP_LINE=${COMP_LINE#"${COMP_WORDS[i]}"};
((COMP_POINT-=${#COMP_WORDS[i]}));
done;
for ((i=0; i <= COMP_CWORD - $word_offset; i++ ))
do
COMP_WORDS[i]=${COMP_WORDS[i+$word_offset]};
done;
for ((i; i <= COMP_CWORD; i++ ))
do
unset 'COMP_WORDS[i]';
done;
((COMP_CWORD -= $word_offset));
COMPREPLY=();
local cur;
_get_comp_words_by_ref cur;
if [[ $COMP_CWORD -eq 0 ]]; then
local IFS='
';
compopt -o filenames;
COMPREPLY=($( compgen -d -c -- "$cur" ));
else
local cmd=${COMP_WORDS[0]} compcmd=${COMP_WORDS[0]};
local cspec=$( complete -p $cmd 2>/dev/null );
if [[ ! -n $cspec && $cmd == / ]]; then
cspec=$( complete -p ${cmd##/} 2>/dev/null );
[[ -n $cspec ]] && compcmd=${cmd##
/};
fi;
if [[ ! -n $cspec ]]; then
compcmd=${cmd##/};
_completion_loader $compcmd;
cspec=$( complete -p $compcmd 2>/dev/null );
fi;
if [[ -n $cspec ]]; then
if [[ ${cspec#
-F } != $cspec ]]; then
local func=${cspec#-F };
func=${func%% };
if [[ ${#COMP_WORDS[@]} -ge 2 ]]; then
$func $cmd "${COMP_WORDS[${#COMP_WORDS[@]}-1]}" "${COMP_WORDS[${#COMP_WORDS[@]}-2]}";
else
$func $cmd "${COMP_WORDS[${#COMP_WORDS[@]}-1]}";
fi;
local opt;
while [[ $cspec == " -o " ]]; do
cspec=${cspec#
-o };
opt=${cspec%% };
compopt -o $opt;
cspec=${cspec#$opt};
done;
else
cspec=${cspec#complete};
cspec=${cspec%%$compcmd};
COMPREPLY=($( eval compgen "$cspec" -- '$cur' ));
fi;
else
if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
_minimal;
fi;
fi;
fi
}
_complete_as_root ()
{
[[ $EUID -eq 0 || -n ${root_command:-} ]]
}
_completion_loader ()
{
local cmd="${1:-EmptycmD}";
__load_completion "$cmd" && return 124;
complete -F _minimal -- "$cmd" && return 124
}
_configured_interfaces ()
{
if [[ -f /etc/debian_version ]]; then
COMPREPLY=($( compgen -W "$( command sed -ne 's|^iface ([^ ]{1,}).
$|\1|p' /etc/network/interfaces /etc/network/interfaces.d/
2>/dev/null )" -- "$cur" ));
else
if [[ -f /etc/SuSE-release ]]; then
COMPREPLY=($( compgen -W "$( printf '%s\n' /etc/sysconfig/network/ifcfg-* | command sed -ne 's|.ifcfg-([^*].)$|\1|p' )" -- "$cur" ));
else
if [[ -f /etc/pld-release ]]; then
COMPREPLY=($( compgen -W "$( command ls -B /etc/sysconfig/interfaces | command sed -ne 's|.ifcfg-([^*].)$|\1|p' )" -- "$cur" ));
else
COMPREPLY=($( compgen -W "$( printf '%s\n' /etc/sysconfig/network-scripts/ifcfg-* | command sed -ne 's|.ifcfg-([^*].)$|\1|p' )" -- "$cur" ));
fi;
fi;
fi
}
_count_args ()
{
local i cword words;
__reassemble_comp_words_by_ref "$1" words cword;
args=1;
for i in "${words[@]:1:cword-1}";
do
[[ "$i" != -* ]] && args=$(($args+1));
done
}
_dvd_devices ()
{
COMPREPLY+=($( compgen -f -d -X "!/?(r)dvd" -- "${cur:-/dev/}" ))
}
_expand ()
{
if [[ "$cur" == ~/ ]]; then
__expand_tilde_by_ref cur;
else
if [[ "$cur" == ~* ]]; then
_tilde "$cur" || eval COMPREPLY[0]=$(printf %q "${COMPREPLY[0]#~}");
return ${#COMPREPLY[@]};
fi;
fi
}
_filedir ()
{
local IFS='
';
_tilde "$cur" || return;
local -a toks;
local x tmp;
x=$( compgen -d -- "$cur" ) && while read -r tmp; do
toks+=("$tmp");
done <<< "$x";
if [[ "$1" != -d ]]; then
local quoted;
_quote_readline_by_ref "$cur" quoted;
local xspec=${1:+"!.@($1|${1^^})"};
x=$( compgen -f -X "$xspec" -- $quoted ) && while read -r tmp; do
toks+=("$tmp");
done <<< "$x";
[[ -n ${COMP_FILEDIR_FALLBACK:-} && -n "$1" && ${#toks[@]} -lt 1 ]] && x=$( compgen -f -- $quoted ) && while read -r tmp; do
toks+=("$tmp");
done <<< "$x";
fi;
if [[ ${#toks[@]} -ne 0 ]]; then
compopt -o filenames 2> /dev/null;
COMPREPLY+=("${toks[@]}");
fi
}
_filedir_xspec ()
{
local cur prev words cword;
_init_completion || return;
_tilde "$cur" || return;
local IFS='
' xspec=${_xspecs[${1##
/}]} tmp;
local -a toks;
toks=($(
compgen -d -- "$(quote_readline "$cur")" | {
while read -r tmp; do
printf '%s\n' $tmp
done
}
));
eval xspec="${xspec}";
local matchop=!;
if [[ $xspec == !* ]]; then
xspec=${xspec#!};
matchop=@;
fi;
xspec="$matchop($xspec|${xspec^^})";
toks+=($(
eval compgen -f -X "'!$xspec'" -- "$(quote_readline "$cur")" | {
while read -r tmp; do
[[ -n $tmp ]] && printf '%s\n' $tmp
done
}
));
if [[ ${#toks[@]} -ne 0 ]]; then
compopt -o filenames;
COMPREPLY=("${toks[@]}");
fi
}
_fstypes ()
{
local fss;
if [[ -e /proc/filesystems ]]; then
fss="$( cut -d' ' -f2 /proc/filesystems )
$( awk '! /*/ { print $NF }' /etc/filesystems 2>/dev/null )";
else
fss="$( awk '/^[ \t][^#]/ { print $3 }' /etc/fstab 2>/dev/null )
$( awk '/^[ \t]
[^#]/ { print $3 }' /etc/mnttab 2>/dev/null )
$( awk '/^[ \t][^#]/ { print $4 }' /etc/vfstab 2>/dev/null )
$( awk '{ print $1 }' /etc/dfs/fstypes 2>/dev/null )
$( [[ -d /etc/fs ]] && command ls /etc/fs )";
fi;
[[ -n $fss ]] && COMPREPLY+=($( compgen -W "$fss" -- "$cur" ))
}
_get_comp_words_by_ref ()
{
local exclude flag i OPTIND=1;
local cur cword words=();
local upargs=() upvars=() vcur vcword vprev vwords;
while getopts "c:i:n:p:w:" flag "$@"; do
case $flag in
c)
vcur=$OPTARG
;;
i)
vcword=$OPTARG
;;
n)
exclude=$OPTARG
;;
p)
vprev=$OPTARG
;;
w)
vwords=$OPTARG
;;
esac;
done;
while [[ $# -ge $OPTIND ]]; do
case ${!OPTIND} in
cur)
vcur=cur
;;
prev)
vprev=prev
;;
cword)
vcword=cword
;;
words)
vwords=words
;;
)
echo "bash: $FUNCNAME(): `${!OPTIND}': unknown argument" 1>&2;
return 1
;;
esac;
let "OPTIND += 1";
done;
__get_cword_at_cursor_by_ref "$exclude" words cword cur;
[[ -n $vcur ]] && {
upvars+=("$vcur");
upargs+=(-v $vcur "$cur")
};
[[ -n $vcword ]] && {
upvars+=("$vcword");
upargs+=(-v $vcword "$cword")
};
[[ -n $vprev && $cword -ge 1 ]] && {
upvars+=("$vprev");
upargs+=(-v $vprev "${words[cword - 1]}")
};
[[ -n $vwords ]] && {
upvars+=("$vwords");
upargs+=(-a${#words[@]} $vwords "${words[@]}")
};
(( ${#upvars[@]} )) && local "${upvars[@]}" && _upvars "${upargs[@]}"
}
_get_cword ()
{
local LC_CTYPE=C;
local cword words;
__reassemble_comp_words_by_ref "$1" words cword;
if [[ -n ${2//[^0-9]/} ]]; then
printf "%s" "${words[cword-$2]}";
else
if [[ "${#words[cword]}" -eq 0 || "$COMP_POINT" == "${#COMP_LINE}" ]]; then
printf "%s" "${words[cword]}";
else
local i;
local cur="$COMP_LINE";
local index="$COMP_POINT";
for ((i = 0; i <= cword; ++i ))
do
while [[ "${#cur}" -ge ${#words[i]} && "${cur:0:${#words[i]}}" != "${words[i]}" ]]; do
cur="${cur:1}";
[[ $index -gt 0 ]] && ((index--));
done;
if [[ "$i" -lt "$cword" ]]; then
local old_size="${#cur}";
cur="${cur#${words[i]}}";
local new_size="${#cur}";
index=$(( index - old_size + new_size ));
fi;
done;
if [[ "${words[cword]:0:${#cur}}" != "$cur" ]]; then
printf "%s" "${words[cword]}";
else
printf "%s" "${cur:0:$index}";
fi;
fi;
fi
}
_get_first_arg ()
{
local i;
arg=;
for ((i=1; i < COMP_CWORD; i++ ))
do
if [[ "${COMP_WORDS[i]}" != -
]]; then
arg=${COMP_WORDS[i]};
break;
fi;
done
}
_get_pword ()
{
if [[ $COMP_CWORD -ge 1 ]]; then
_get_cword "${@:-}" 1;
fi
}
_gids ()
{
if type getent &> /dev/null; then
COMPREPLY=($( compgen -W '$( getent group | cut -d: -f3 )' -- "$cur" ));
else
if type perl &> /dev/null; then
COMPREPLY=($( compgen -W '$( perl -e '"'"'while (($gid) = (getgrent)[2]) { print $gid . "\n" }'"'"' )' -- "$cur" ));
else
COMPREPLY=($( compgen -W '$( cut -d: -f3 /etc/group )' -- "$cur" ));
fi;
fi
}
_have ()
{
PATH=$PATH:/usr/sbin:/sbin:/usr/local/sbin type $1 &> /dev/null
}
_included_ssh_config_files ()
{
[[ $# -lt 1 ]] && echo "error: $FUNCNAME: missing mandatory argument CONFIG";
local configfile i f;
configfile=$1;
local included=$( command sed -ne 's/^[[:blank:]]
[Ii][Nn][Cc][Ll][Uu][Dd][Ee][[:blank:]]{1,}([^#%])(#.){0,1}$/\1/p' "${configfile}" );
for i in ${included[@]};
do
if ! [[ "$i" =
^~.|^/. ]]; then
if [[ "$configfile" =~ ^/etc/ssh.* ]]; then
i="/etc/ssh/$i";
else
i="$HOME/.ssh/$i";
fi;
fi;
__expand_tilde_by_ref i;
for f in ${i};
do
if [ -r $f ]; then
config+=("$f");
_included_ssh_config_files $f;
fi;
done;
done
}
_init_completion ()
{
local exclude= flag outx errx inx OPTIND=1;
while getopts "n:e:o:i:s" flag "$@"; do
case $flag in
n)
exclude+=$OPTARG
;;
e)
errx=$OPTARG
;;
o)
outx=$OPTARG
;;
i)
inx=$OPTARG
;;
s)
split=false;
exclude+==
;;
esac;
done;
COMPREPLY=();
local redir="@(?([0-9])<|?([0-9&])>?(>)|>&)";
_get_comp_words_by_ref -n "$exclude<>&" cur prev words cword;
_variables && return 1;
if [[ $cur == $redir* || $prev == $redir ]]; then
local xspec;
case $cur in
2'>')
xspec=$errx
;;
'>')
xspec=$outx
;;
'<')
xspec=$inx
;;
)
case $prev in
2'>'
)
xspec=$errx
;;
'>')
xspec=$outx
;;
'<')
xspec=$inx
;;
esac
;;
esac;
cur="${cur##$redir}";
_filedir $xspec;
return 1;
fi;
local i skip;
for ((i=1; i < ${#words[@]}; 1))
do
if [[ ${words[i]} == $redir
]]; then
[[ ${words[i]} == $redir ]] && skip=2 || skip=1;
words=("${words[@]:0:i}" "${words[@]:i+skip}");
[[ $i -le $cword ]] &amp;&amp; cword=$(( cword - skip ));
else
i=$(( ++i ));
fi;
done;
[[ $cword -le 0 ]] && return 1;
prev=${words[cword-1]};
[[ -n ${split-} ]] && _split_longopt && split=true;
return 0
}
_installed_modules ()
{
COMPREPLY=($( compgen -W "$( PATH="$PATH:/sbin" lsmod | awk '{if (NR != 1) print $1}' )" -- "$1" ))
}
_ip_addresses ()
{
local PATH=$PATH:/sbin;
COMPREPLY+=($( compgen -W "$( { LC_ALL=C ifconfig -a || ip addr show; } 2>/dev/null | command sed -ne 's/.addr:([^[:space:]])./\1/p' -ne 's|.inet[[:space:]]{1,}([^[:space:]/]).|\1|p' )" -- "$cur" ))
}
_kernel_versions ()
{
COMPREPLY=($( compgen -W '$( command ls /lib/modules )' -- "$cur" ))
}
_known_hosts ()
{
local cur prev words cword;
init_completion -n : || return;
local options;
[[ "$1" == -a || "$2" == -a ]] && options=-a;
[[ "$1" == -c || "$2" == -c ]] && options+=" -c";
known_hosts_real $options -- "$cur"
}
known_hosts_real ()
{
local configfile flag prefix;
local cur curd awkcur user suffix aliases i host ipv4 ipv6;
local -a kh khd config;
local OPTIND=1;
while getopts "ac46F:p:" flag "$@"; do
case $flag in
a)
aliases='yes'
;;
c)
suffix=':'
;;
F)
configfile=$OPTARG
;;
p)
prefix=$OPTARG
;;
4)
ipv4=1
;;
6)
ipv6=1
;;
esac;
done;
[[ $# -lt $OPTIND ]] && echo "error: $FUNCNAME: missing mandatory argument CWORD";
cur=${!OPTIND};
let "OPTIND += 1";
[[ $# -ge $OPTIND ]] && echo "error: $FUNCNAME("$@"): unprocessed arguments:" $(while [[ $# -ge $OPTIND ]]; do printf '%s\n' ${!OPTIND}; shift; done);
[[ $cur == @ ]] && user=${cur%@}@ && cur=${cur#@};
kh=();
if [[ -n $configfile ]]; then
[[ -r $configfile ]] && config+=("$configfile");
else
for i in /etc/ssh/ssh_config /.ssh/config /.ssh2/config;
do
[[ -r $i ]] && config+=("$i");
done;
fi;
for i in "${config[@]}";
do
_included_ssh_config_files "$i";
done;
if [[ ${#config[@]} -gt 0 ]]; then
local OIFS=$IFS IFS='
' j;
local -a tmpkh;
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 ));
IFS=$OIFS;
for i in "${tmpkh[@]}";
do
while [[ $i =
^([^\"])"([^\"])"(.)$ ]]; do
i=${BASH_REMATCH[1]}${BASH_REMATCH[3]};
j=${BASH_REMATCH[2]};
__expand_tilde_by_ref j;
[[ -r $j ]] && kh+=("$j");
done;
for j in $i;
do
__expand_tilde_by_ref j;
[[ -r $j ]] && kh+=("$j");
done;
done;
fi;
if [[ -z $configfile ]]; then
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;
do
[[ -r $i ]] && kh+=("$i");
done;
for i in /etc/ssh2/knownhosts ~/.ssh2/hostkeys;
do
[[ -d $i ]] && khd+=("$i"/pub);
done;
fi;
if [[ ${#kh[@]} -gt 0 || ${#khd[@]} -gt 0 ]]; then
awkcur=${cur////\/};
awkcur=${awkcur//./\.};
curd=$awkcur;
if [[ "$awkcur" == [0-9]
[.:]
]]; then
awkcur="^$awkcur[.:]";
else
if [[ "$awkcur" == [0-9]
]]; then
awkcur="^$awkcur.[.:]";
else
if [[ -z $awkcur ]]; then
awkcur="[a-z.:]";
else
awkcur="^$awkcur";
fi;
fi;
fi;
if [[ ${#kh[@]} -gt 0 ]]; then
COMPREPLY+=($( awk 'BEGIN {FS=","}
/^\s
[^|\#]/ {
sub("^@[^ ]+ +", "");
sub(" .*$", "");
for (i=1; i<=NF; ++i) {
sub("^\", "", $i); sub("\?$", "", $i);
if ($i !
/[*?]/ && $i ~ /'"$awkcur"'/) {print $i}
}}' "${kh[@]}" 2>/dev/null ));
fi;
if [[ ${#khd[@]} -gt 0 ]]; then
for i in "${khd[@]}";
do
if [[ "$i" == *key_22
$curd*.pub && -r "$i" ]]; then
host=${i/#*key_22
/};
host=${host/%.pub/};
COMPREPLY+=($host);
fi;
done;
fi;
for ((i=0; i < ${#COMPREPLY[@]}; i++ ))
do
COMPREPLY[i]=$prefix$user${COMPREPLY[i]}$suffix;
done;
fi;
if [[ ${#config[@]} -gt 0 && -n "$aliases" ]]; then
local hosts=$( command sed -ne 's/^[[:blank:]][Hh][Oo][Ss][Tt][[:blank:]]{1,}([^#*?%])(#.){0,1}$/\1/p' "${config[@]}" );
COMPREPLY+=($( compgen -P "$prefix$user" -S "$suffix" -W "$hosts" -- "$cur" ));
fi;
COMPREPLY+=($( compgen -W "$( ruptime 2>/dev/null | awk '!/^ruptime:/ { print $1 }' )" -- "$cur" ));
if [[ -n ${COMP_KNOWN_HOSTS_WITH_HOSTFILE-1} ]]; then
COMPREPLY+=($( compgen -A hostname -P "$prefix$user" -S "$suffix" -- "$cur" ));
fi;
if [[ -n $ipv4 ]]; then
COMPREPLY=("${COMPREPLY[@]/
:$suffix/}");
fi;
if [[ -n $ipv6 ]]; then
COMPREPLY=("${COMPREPLY[@]/+([0-9]).+([0-9]).+([0-9]).+([0-9])$suffix/}");
fi;
if [[ -n $ipv4 || -n $ipv6 ]]; then
for i in ${!COMPREPLY[@]};
do
[[ -n ${COMPREPLY[i]} ]] || unset -v COMPREPLY[i];
done;
fi;
__ltrim_colon_completions "$prefix$user$cur"
}
_longopt ()
{
local cur prev words cword split;
_init_completion -s || return;
case "${prev,,}" in
--help | --usage | --version)
return
;;
--dir)
_filedir -d;
return
;;
--file | --path)
filedir;
return
;;
--+([-a-z0-9
]))
local argtype=$( LC_ALL=C $1 --help 2>&1 | command sed -ne "s|.
$prev[{0,1}=[<[]{0,1}([-A-Za-z0-9
]{1,}).|\1|p" );
case ${argtype,,} in
dir)
_filedir -d;
return
;;
file | path)
_filedir;
return
;;
esac
;;
esac;
$split && return;
if [[ "$cur" == -
]]; then
COMPREPLY=($( compgen -W "$( LC_ALL=C $1 --help 2>&1 | command sed -ne 's/.(--[-A-Za-z0-9]{1,}={0,1})./\1/p' | sort -u )" -- "$cur" ));
[[ $COMPREPLY == = ]] && compopt -o nospace;
else
if [[ "$1" == @(rmdir|chroot) ]]; then
_filedir -d;
else
[[ "$1" == mkdir ]] && compopt -o nospace;
_filedir;
fi;
fi
}
_mac_addresses ()
{
local re='([A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}';
local PATH="$PATH:/sbin:/usr/sbin";
COMPREPLY+=($( { LC_ALL=C ifconfig -a || ip link show; } 2>/dev/null | command 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"
));
COMPREPLY+=($( { arp -an || ip neigh show; } 2>/dev/null | command sed -ne "s/.
[[:space:]]($re)[[:space:]]./\1/p" -ne "s/.[[:space:]]($re)[[:space:]]$/\1/p" ));
COMPREPLY+=($( command sed -ne "s/^[[:space:]]
($re)[[:space:]]./\1/p" /etc/ethers 2>/dev/null ));
COMPREPLY=($( compgen -W '${COMPREPLY[@]}' -- "$cur" ));
__ltrim_colon_completions "$cur"
}
_minimal ()
{
local cur prev words cword split;
_init_completion -s || return;
$split && return;
_filedir
}
_modules ()
{
local modpath;
modpath=/lib/modules/$1;
COMPREPLY=($( compgen -W "$( command ls -RL $modpath 2>/dev/null | command sed -ne 's/^(.
).k{0,1}o(.[gx]z){0,1}$/\1/p' )" -- "$cur" ))
}
ncpus ()
{
local var=NPROCESSORS_ONLN;
[[ $OSTYPE == linux ]] && var=
$var;
local n=$( getconf $var 2>/dev/null );
printf %s ${n:-1}
}
_parse_help ()
{
eval local cmd=$( quote "$1" );
local line;
{
case $cmd in
-)
cat
;;
)
LC_ALL=C "$( dequote "$cmd" )" ${2:---help} 2>&1
;;
esac
} | while read -r line; do
[[ $line == ([[:blank:]])- ]] || continue;
while [[ $line =~ ((^|[^-])-[A-Za-z0-9?][[:space:]]+)[?[A-Z0-9]+]? ]]; do
line=${line/"${BASH_REMATCH[0]}"/"${BASH_REMATCH[1]}"};
done;
__parse_options "${line// or /, }";
done
}
_parse_usage ()
{
eval local cmd=$( quote "$1" );
local line match option i char;
{
case $cmd in
-)
cat
;;
)
LC_ALL=C "$( dequote "$cmd" )" ${2:---usage} 2>&1
;;
esac
} | while read -r line; do
while [[ $line =~ [[[:space:]]
(-[^]]+)[[:space:]]
] ]]; do
match=${BASH_REMATCH[0]};
option=${BASH_REMATCH[1]};
case $option in
-?([)+([a-zA-Z0-9?]))
for ((i=1; i < ${#option}; i++ ))
do
char=${option:i:1};
[[ $char != '[' ]] && printf '%s\n' -$char;
done
;;
)
__parse_options "$option"
;;
esac;
line=${line#
"$match"};
done;
done
}
_pci_ids ()
{
COMPREPLY+=($( compgen -W "$( PATH="$PATH:/sbin" lspci -n | awk '{print $3}')" -- "$cur" ))
}
_pgids ()
{
COMPREPLY=($( compgen -W '$( command ps axo pgid= )' -- "$cur" ))
}
_pids ()
{
COMPREPLY=($( compgen -W '$( command ps axo pid= )' -- "$cur" ))
}
_pnames ()
{
if [[ "$1" == -s ]]; then
COMPREPLY=($( compgen -X '' -W '$( command ps axo comm | command sed -e 1d )' -- "$cur" ));
else
COMPREPLY=($( compgen -X '' -W '$( command ps axo command= | command sed -e
"s/ .//" -e
"s:.
/::" -e
"s/:$//" -e
"s/^[[(-]//" -e
"s/[])]$//" | sort -u )' -- "$cur" ));
fi
}
_quote_readline_by_ref ()
{
if [ -z "$1" ]; then
printf -v $2 %s "$1";
else
if [[ $1 == '* ]]; then
printf -v $2 %s "${1:1}";
else
if [[ $1 == ~* ]]; then
printf -v $2 ~%q "${1:1}";
else
printf -v $2 %q "$1";
fi;
fi;
fi;
[[ ${!2} == \ ]] && printf -v $2 %s "${1//\\/\}";
[[ ${!2} == $* ]] && eval $2=${!2}
}
_realcommand ()
{
type -P "$1" > /dev/null && {
if type -p realpath > /dev/null; then
realpath "$(type -P "$1")";
else
if type -p greadlink > /dev/null; then
greadlink -f "$(type -P "$1")";
else
if type -p readlink > /dev/null; then
readlink -f "$(type -P "$1")";
else
type -P "$1";
fi;
fi;
fi
}
}
_rl_enabled ()
{
[[ "$( bind -v )" == $1+([[:space:]])on ]]
}
_root_command ()
{
local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin;
local root_command=$1;
_command
}
_service ()
{
local cur prev words cword;
_init_completion || return;
[[ $cword -gt 2 ]] && return;
if [[ $cword -eq 1 && $prev == ?(/)service ]]; then
_services;
[[ -e /etc/mandrake-release ]] && _xinetd_services;
else
local sysvdirs;
_sysvdirs;
COMPREPLY=($( compgen -W 'command sed -e "y/|/ /" \ -ne "s/^.*\(U\|msg_u\)sage.*{\(.*\)}.*$/\2/p" \ ${sysvdirs[0]}/${prev##*/} 2>/dev/null start stop' -- "$cur" ));
fi
}
_services ()
{
local sysvdirs;
_sysvdirs;
local IFS='
' reset=$(shopt -p nullglob);
shopt -s nullglob;
COMPREPLY=($( printf '%s\n' ${sysvdirs[0]}/!($_backup_glob|functions|README) ));
$reset;
COMPREPLY+=($( systemctl list-units --full --all 2>/dev/null | awk '$1 ~ /.service$/ { sub("\.service$", "", $1); print $1 }' ));
if [[ -x /sbin/upstart-udev-bridge ]]; then
COMPREPLY+=($( initctl list 2>/dev/null | cut -d' ' -f1 ));
fi;
COMPREPLY=($( compgen -W '${COMPREPLY[@]#${sysvdirs[0]}/}' -- "$cur" ))
}
_shells ()
{
local shell rest;
while read -r shell rest; do
[[ $shell == /
&& $shell == "$cur"* ]] && COMPREPLY+=($shell);
done 2> /dev/null < /etc/shells
}
_signals ()
{
local -a sigs=($( compgen -P "$1" -A signal "SIG${cur#$1}" ));
COMPREPLY+=("${sigs[@]/#${1}SIG/${1}}")
}
_split_longopt ()
{
if [[ "$cur" == --?= ]]; then
prev="${cur%%?(\)=}";
cur="${cur#
=}";
return 0;
fi;
return 1
}
sysvdirs ()
{
sysvdirs=();
[[ -d /etc/rc.d/init.d ]] && sysvdirs+=(/etc/rc.d/init.d);
[[ -d /etc/init.d ]] && sysvdirs+=(/etc/init.d);
[[ -f /etc/slackware-version ]] && sysvdirs=(/etc/rc.d)
}
terms ()
{
COMPREPLY+=($( compgen -W "$( command sed -ne 's/^([^[:space:]#|]{2,})|./\1/p' /etc/termcap 2>/dev/null )" -- "$cur" ));
COMPREPLY+=($( compgen -W "$( { toe -a 2>/dev/null || toe 2>/dev/null; } | awk '{ print $1 }' | sort -u )" -- "$cur" ))
}
_tilde ()
{
local result=0;
if [[ $1 == ~
&& $1 != / ]]; then
COMPREPLY=($( compgen -P '' -u -- "${1#~}" ));
result=${#COMPREPLY[@]};
[[ $result -gt 0 ]] && compopt -o filenames 2> /dev/null;
fi;
return $result
}
_uids ()
{
if type getent &> /dev/null; then
COMPREPLY=($( compgen -W '$( getent passwd | cut -d: -f3 )' -- "$cur" ));
else
if type perl &> /dev/null; then
COMPREPLY=($( compgen -W '$( perl -e '"'"'while (($uid) = (getpwent)[2]) { print $uid . "\n" }'"'"' )' -- "$cur" ));
else
COMPREPLY=($( compgen -W '$( cut -d: -f3 /etc/passwd )' -- "$cur" ));
fi;
fi
}
_upvar ()
{
if unset -v "$1"; then
if (( $# == 2 )); then
eval $1="$2";
else
eval $1=("${@:2}");
fi;
fi
}
_upvars ()
{
if ! (( $# )); then
echo "${FUNCNAME[0]}: usage: ${FUNCNAME[0]} [-v varname" "value] | [-aN varname [value ...]] ..." 1>&2;
return 2;
fi;
while (( $# )); do
case $1 in
-a*)
[[ -n ${1#-a} ]] || {
echo "bash: ${FUNCNAME[0]}: `$1': missing" "number specifier" 1>&2;
return 1
};
printf %d "${1#-a}" &> /dev/null || {
echo "bash:" "${FUNCNAME[0]}: `$1': invalid number specifier" 1>&2;
return 1
};
[[ -n "$2" ]] && unset -v "$2" && eval $2=("${@:3:${1#-a}}") && shift $((${1#-a} + 2)) || {
echo "bash: ${FUNCNAME[0]}:" "`$1${2+ }$2': missing argument(s)" 1>&2;
return 1
}
;;
-v)
[[ -n "$2" ]] && unset -v "$2" && eval $2="$3" && shift 3 || {
echo "bash: ${FUNCNAME[0]}: $1: missing" "argument(s)" 1>&2;
return 1
}
;;
)
echo "bash: ${FUNCNAME[0]}: $1: invalid option" 1>&2;
return 1
;;
esac;
done
}
_usb_ids ()
{
COMPREPLY+=($( compgen -W "$( PATH="$PATH:/sbin" lsusb | awk '{print $6}' )" -- "$cur" ))
}
_user_at_host ()
{
local cur prev words cword;
_init_completion -n : || return;
if [[ $cur == @ ]]; then
_known_hosts_real "$cur";
else
COMPREPLY=($( compgen -u -S @ -- "$cur" ));
compopt -o nospace;
fi
}
_usergroup ()
{
if [[ $cur == \\ || $cur == ::
]]; then
return;
else
if [[ $cur == \: ]]; then
local prefix;
prefix=${cur%%([^:])};
prefix=${prefix//\};
local mycur="${cur#
[:]}";
if [[ $1 == -u ]]; then
_allowed_groups "$mycur";
else
local IFS='
';
COMPREPLY=($( compgen -g -- "$mycur" ));
fi;
COMPREPLY=($( compgen -P "$prefix" -W "${COMPREPLY[@]}" ));
else
if [[ $cur == : ]]; then
local mycur="${cur#:}";
if [[ $1 == -u ]]; then
_allowed_groups "$mycur";
else
local IFS='
';
COMPREPLY=($( compgen -g -- "$mycur" ));
fi;
else
if [[ $1 == -u ]]; then
_allowed_users "$cur";
else
local IFS='
';
COMPREPLY=($( compgen -u -- "$cur" ));
fi;
fi;
fi;
fi
}
_userland ()
{
local userland=$( uname -s );
[[ $userland == @(Linux|GNU/
) ]] && userland=GNU;
[[ $userland == $1 ]]
}
_variables ()
{
if [[ $cur =
^($({[!#]?)?)([A-Za-z0-9
])$ ]]; then
if [[ $cur == ${
]]; then
local arrs vars;
vars=($( compgen -A variable -P ${BASH_REMATCH[1]} -S '}' -- ${BASH_REMATCH[3]} )) && arrs=($( compgen -A arrayvar -P ${BASH_REMATCH[1]} -S '[' -- ${BASH_REMATCH[3]} ));
if [[ ${#vars[@]} -eq 1 && -n $arrs ]]; then
compopt -o nospace;
COMPREPLY+=(${arrs[]});
else
COMPREPLY+=(${vars[
]});
fi;
else
COMPREPLY+=($( compgen -A variable -P '$' -- "${BASH_REMATCH[3]}" ));
fi;
return 0;
else
if [[ $cur =~ ^(${[#!]?)([A-Za-z0-9
])[([^]])$ ]]; then
local IFS='
';
COMPREPLY+=($( compgen -W '$(printf %s\n "${!'${BASH_REMATCH[2]}'[@]}")' -P "${BASH_REMATCH[1]}${BASH_REMATCH[2]}[" -S ']}' -- "${BASH_REMATCH[3]}" ));
if [[ ${BASH_REMATCH[3]} == [@] ]]; then
COMPREPLY+=("${BASH_REMATCH[1]}${BASH_REMATCH[2]}[${BASH_REMATCH[3]}]}");
fi;
_ltrim_colon_completions "$cur";
return 0;
else
if [[ $cur =~ ^${[#!]?[A-Za-z0-9
]
[.*]$ ]]; then
COMPREPLY+=("$cur}");
__ltrim_colon_completions "$cur";
return 0;
else
case $prev in
TZ)
cur=/usr/share/zoneinfo/$cur;
_filedir;
for i in ${!COMPREPLY[@]};
do
if [[ ${COMPREPLY[i]} == *.tab ]]; then
unset 'COMPREPLY[i]';
continue;
else
if [[ -d ${COMPREPLY[i]} ]]; then
COMPREPLY[i]+=/;
compopt -o nospace;
fi;
fi;
COMPREPLY[i]=${COMPREPLY[i]#/usr/share/zoneinfo/};
done;
return 0
;;
esac;
fi;
fi;
fi;
return 1
}
_xfunc ()
{
set -- "$@";
local srcfile=$1;
shift;
declare -F $1 &> /dev/null || {
__load_completion "$srcfile"
};
"$@"
}
_xinetd_services ()
{
local xinetddir=/etc/xinetd.d;
if [[ -d $xinetddir ]]; then
local IFS='
' reset=$(shopt -p nullglob);
shopt -s nullglob;
local -a svcs=($( printf '%s\n' $xinetddir/!($_backup_glob) ));
$reset;
COMPREPLY+=($( compgen -W '${svcs[@]#$xinetddir/}' -- "$cur" ));
fi
}
command_not_found_handle ()
{
if [ -x /usr/lib/command-not-found ]; then
/usr/lib/command-not-found -- "$1";
return $?;
else
if [ -x /usr/share/command-not-found/command-not-found ]; then
/usr/share/command-not-found/command-not-found -- "$1";
return $?;
else
printf "%s: command not found\n" "$1" 1>&2;
return 127;
fi;
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"
}

from capsulecorp-pentest.

R3dy avatar R3dy commented on May 26, 2024

OK this one is getting out of hand. Since we have resolved the original issue I'm going to close this one and ask you to open a new one and re-post the URL error issue when running vagrant up gohan

from capsulecorp-pentest.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.