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 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245
|
# 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 davfs 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 {,a}sync {,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
{,no}user users' -- "$cur") )
case "$fstype" in
adfs|auto)
COMPREPLY+=( $(compgen -W '{u,g}id= {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 {,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 cache=' -- "$cur") )
;;&
davfs|auto)
COMPREPLY+=( $(compgen -W 'conf= {file,dir}_mode= {u,g}id=
username=' -- "$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 max_dir_size_kb= 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= rp_size=' -- "$cur") )
;;&
jfs|auto)
COMPREPLY+=( $(compgen -W 'iocharset= resize= {,no}integrity
errors= {,no,usr,grp}quota' -- "$cur") )
;;&
nfs|nfs4|auto)
COMPREPLY+=( $(compgen -W 'soft hard timeo= retrans= {r,w}size=
{,no}ac acreg{min,max}= acdir{min,max}= actimeo= bg fg
retry= sec= {,no}sharecache {,no}resvport lookupcache=
proto= port= {,no}intr {,no}cto {,nfs}vers= ' -- "$cur") )
;;&
nfs|auto)
COMPREPLY+=( $(compgen -W 'udp tcp rdma mount{port,proto,host}=
mountvers= namlen={,no}lock {,no}acl {,no}rdirplus
{,no}fsc' -- "$cur") )
;;&
nfs4|auto)
COMPREPLY+=( $(compgen -W 'clientaddr= {,no}migration' \
-- "$cur") )
;;&
ntfs-3g)
COMPREPLY+=( $(compgen -W '{u,g}id= {u,f,d}mask= usermapping=
permissions inherit locale= force {,no}recover
ignore_case remove_hiberfile 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
inode{32,64} {,no}largeio logbufs= logbsize= logdev=
rtdev= mtpt= noalign 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
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 |
command sed -ne '/^[[:blank:]]*Sharename/,/^$/p' |
command sed -ne '3,$s|^[^A-Za-z]*\([^[:blank:]]*\).*$|/\1|p' )" \
-- "${cur#//$host}" ) )
fi
fi
_filedir
} &&
complete -F _mount mount
# ex: filetype=sh
|