1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
|
# mount(8) completion -*- shell-script -*-
_mount()
{
local cur prev words cword
_init_completion -n =: || return
local split=false
case "$prev" in
-t|--types)
# find /lib/modules/$(uname -r)/ -type f -path '*/fs/*.ko' -printf '%f\n' | cut -d. -f1
# FIXME: no<fstype>
if [[ "$cur" == ?*,* ]]; then
prev="${cur%,*}"
cur="${cur##*,}"
split=true
fi
COMPREPLY=( $(compgen -W 'auto adfs affs autofs btrfs cifs coda
cramfs debugfs devpts efs ext2 ext3 ext4 fuse hfs hfsplus hpfs
iso9660 jffs2 jfs minix msdos ncpfs nfs nfs4 ntfs ntfs-3g proc
qnx4 ramfs reiserfs romfs squashfs smbfs sysv tmpfs ubifs udf
ufs umsdos usbfs vfat xfs' -- "$cur") )
_fstypes
$split && COMPREPLY=( ${COMPREPLY[@]/#/$prev,} )
return
;;
--bind|-B|--rbind|-R)
_filedir -d
return
;;
-p|--pass-fd)
COMPREPLY=( $(compgen -W '{0..9}') )
compopt -o nospace
return
;;
-L)
COMPREPLY=( $( cd "/dev/disk/by-label/" 2>/dev/null || return; \
compgen -f -- "$cur" ) )
return
;;
-U)
COMPREPLY=( $( cd "/dev/disk/by-uuid/" 2>/dev/null || return; \
compgen -f -- "$cur" ) )
return
;;
-O|--test-opts)
# argument required but no completions available
return
;;
-o|--options)
local fstype=auto # default fstype
for (( i=${#words[@]}-1; i>0; i-- )); do
if [[ "${words[i]}" == -@(t|-types)* ]]; then
if [[ "${words[i]}" == *=* ]]; then
[[ "${words[i]}" == ?*,* ]] && break
fstype="${words[i]#-*=}"
else
[[ "${words[i+1]}" == ?*,* ]] && break
fstype="${words[i+1]}"
fi
break
fi
done
# no<fstype> is not a real fstype, reset to "auto"
[[ "$fstype" == no?* ]] && fstype=auto
# split options list
if [[ "$cur" == ?*,* ]]; then
prev="${cur%,*}"
cur="${cur##*,}"
split=true
fi
# no completion if $cur is opt=smth
[[ "$cur" == *=* ]] && return
# mount options
COMPREPLY=( $(compgen -W 'loop async {,no}atime {,no}auto
{,fs,def,root}context= defaults {,no}dev {,no}diratime dirsync
{,no}exec group {,no}iversion {,no}mand _netdev nofail
{,no}relatime {,no}strictatime {,no}suid owner remount ro rw
sync {,no}user users' -- "$cur") )
case "$fstype" in
adfs|auto)
COMPREPLY+=( $(compgen -W 'uid= gid= {own,oth}mask=' -- \
"$cur") )
;;&
affs|auto)
COMPREPLY+=( $(compgen -W '{u,g}id= set{u,g}id= mode= protect
usemp verbose prefix= volume= reserved= root= bs=
{,no,usr,grp}quota' -- "$cur") )
;;&
btrfs|auto)
COMPREPLY+=( $(compgen -W 'degraded subvol= subvolid= device=
nodatasum nodatacow nobarrier max_inline= alloc_start=
thread_pool= compress= compress-force= ssd noacl notreelog
flushoncommit metadata_ratio= {,no}space_cache clear_cache
user_subvol_rm_allowed autodefrag inode_cache' -- "$cur") )
;;&
cifs|auto)
COMPREPLY+=( $(compgen -W 'user= password= credentials= {u,g}id=
force{u,g}id port= servern= netbiosname= {file,dir}_mode=
ip= domain= guest iocharset ro rw {,no}setuids {,no,dyn}perm
directio {,no}mapchars {,no}intr hard soft noacl nocase sec=
nobrl sfu {,no}serverino nounix nouser_xattr {r,w}size=
rwpidforward backup{u,g}id' -- "$cur") )
;;&
ext[2-4]|auto)
COMPREPLY+=( $(compgen -W '{,no}acl bsddf minixdf check= debug
errors= {,no}grpid {bsd,sysv}groups {,no,usr,grp}quota
nobh nouid32 oldalloc orlov res{u,g}id= sb=
{,no}user_xattr' -- "$cur") )
;;&
ext[34]|auto)
COMPREPLY+=( $(compgen -W 'journal= journal_dev= norecovery
noload data= barrier= commit=' -- "$cur") )
;;&
ext4|auto)
COMPREPLY+=( $(compgen -W 'journal_checksum journal_async_commit
nobarrier inode_readahead= stripe= {,no}delalloc abort
{max,min}_batch_time= journal_ioprio= {,no}auto_da_alloc
{,no}discard nouid32 resize {,no}block_validity
dioread_{,no}lock i_version' -- "$cur") )
;;&
msdos|umsdos|vfat|auto)
COMPREPLY+=( $(compgen -W 'blocksize= {u,g}id= {u,d,f}mask=
allow_utime= check= codepage= conv= cvf_format= cvf_option=
debug fat= iocharset= tz= quiet showexec sys_immutable flush
usefree {,no}dots dotsOK=' -- "$cur") )
;;&
vfat|auto)
COMPREPLY+=( $(compgen -W 'uni_xlate posix nonumtail utf8
shortname=' -- "$cur") )
;;&
iso9660|auto)
COMPREPLY+=( $(compgen -W 'norock nojoliet check= {u,g}id= map=
mode= unhide block= conv= cruft session= sbsector=
iocharset= utf8' -- "$cur") )
;;&
jffs2|auto)
COMPREPLY+=( $(compgen -W 'compr=' -- "$cur") )
;;&
jfs|auto)
COMPREPLY+=( $(compgen -W 'iocharset= resize= {,no}integrity
errors= {,no,usr,grp}quota' -- "$cur") )
;;&
ntfs-3g)
COMPREPLY+=( $(compgen -W '{u,g}id= {u,f,d}mask= usermapping=
permissions inherit ro locale= force {,no}recover
ignore_case remove_hiberfile {,no,rel}atime show_sys_files
hide_{hid,dot}_files windows_names allow_other max_read=
silent no_def_opts streams_interface= user_xattr efs_raw
{,no}compression debug no_detach' -- "$cur") )
;;&
proc|auto)
COMPREPLY+=( $(compgen -W '{u,g}id=' -- "$cur") )
;;&
reiserfs|auto)
COMPREPLY+=( $(compgen -W 'conv hash= {,no_un}hashed_relocation
noborder nolog notail replayonly resize= user_xattr acl
barrier=' -- "$cur") )
;;&
tmpfs|auto)
COMPREPLY+=( $(compgen -W 'size= nr_blocks= nr_inodes= mode=
{u,g}id= mpol=' -- "$cur") )
;;&
udf|auto)
COMPREPLY+=( $(compgen -W '{u,g}id= umask= unhide undelete
nostrict iocharset bs= novrs session= anchor= volume=
partition= lastblock= fileset= rootdir=' -- "$cur") )
;;&
usbfs|auto)
COMPREPLY+=( $(compgen -W 'dev{u,g}id= devmode= bus{u,g}id=
busmode= list{u,g}id= listmode=' -- "$cur") )
;;&
xfs|auto)
COMPREPLY+=( $(compgen -W 'allocsize= {,no}attr2 barrier dmapi
{,no}grpid {bsd,sysv}groups ihashsize= {,no}ikeep inode64
{,no}largeio logbufs= logbsize= logdev= rtdev= mtpt= noalign
noatime norecovery nouuid osyncisosync {u,g,p}qnoenforce
{,u,usr,g,grp,p,prj}quota sunit= swidth= swalloc' \
-- "$cur") )
;;&
esac
# COMP_WORDBREAKS is a real pain in the ass
prev="${prev##*[$COMP_WORDBREAKS]}"
$split && COMPREPLY=( ${COMPREPLY[@]/#/"$prev,"} )
[[ $COMPREPLY == *= ]] && compopt -o nospace
return
;;
esac
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W '--version --help --verbose --all --fork
--fake --internal-only -l --no-mtab --no-canonicalize --pass-fd -s
--read-only --rw -L -U --types --test-opts --options --bind --rbind
--move' -- "$cur" ) )
[[ $COMPREPLY ]] && return
fi
[[ "$cur" == \\ ]] && cur="/"
local sm host
if [[ "$cur" == *:* ]]; then
for sm in "$(type -P showmount)" {,/usr}/{,s}bin/showmount; do
[[ -x $sm ]] || continue
COMPREPLY=( $( compgen -W "$( "$sm" -e ${cur%%:*} | \
awk 'NR>1 {print $1}' )" -- "${cur#*:}" ) )
return 0
done
fi
if [[ "$cur" == //* ]]; then
host=${cur#//}
host=${host%%/*}
if [[ -n $host ]]; then
COMPREPLY=( $( compgen -P "//$host" -W \
"$( smbclient -d 0 -NL $host 2>/dev/null |
sed -ne '/^['"$'\t '"']*Sharename/,/^$/p' |
sed -ne '3,$s|^[^A-Za-z]*\([^'"$'\t '"']*\).*$|/\1|p' )" \
-- "${cur#//$host}" ) )
fi
fi
_filedir
} &&
complete -F _mount mount
# ex: ts=4 sw=4 et filetype=sh
|