246 lines
10 KiB
Bash
246 lines
10 KiB
Bash
# 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 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
|