ip1981

beadm bash completion

Jan 9th, 2013
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.45 KB | None | 0 0
  1. # *** Public Domain ***
  2. #
  3. # Uncomment if do not have zfs bash completion:
  4. #__zfs_get_editable_properties()
  5. #{
  6. #    zfs get 2>&1 | awk '$2 == "YES" {printf("%s=\n", $1)}'
  7. #}
  8. #
  9. #__zpool_list_pools()
  10. #{
  11. #    zpool list -H -o name
  12. #}
  13.  
  14. __beadm_be_list () {
  15.     beadm list -H | nawk -F';' '{print $1}'
  16. }
  17.  
  18. __beadm_be_at_list () {
  19.     beadm list -H | nawk -F';' '{print $1"@"}'
  20. }
  21.  
  22. # List of mounted BE and mount points (for unmount command)
  23. __beadm_unmount_list () {
  24.     beadm list -H | nawk -F';' '$4 != "/" && $4 != "" {print $1" "$4}'
  25. }
  26.  
  27. __beadm_nonactive_list () {
  28.     beadm list -H | nawk -F';' '$3 !~ "N" {print $1}'
  29. }
  30.  
  31. __beadm_nonactive_reboot_list () {
  32.     beadm list -H | nawk -F';' '$3 !~ "R" {print $1}'
  33. }
  34.  
  35. __beadm_snapshot_list () {
  36.     beadm list -s -H | nawk -F';' '{print $2}'
  37. }
  38.  
  39. _beadm () {
  40.     local cur prev opts line
  41.     COMPREPLY=()
  42.  
  43.     # Allow @ (at-sign) for snapshots:
  44.     shopt -u hostcomplete
  45.  
  46.     cur=${COMP_WORDS[COMP_CWORD]}
  47.     prev="${COMP_WORDS[COMP_CWORD-1]}"
  48.     line="${COMP_LINE}"
  49.     cmd="${COMP_WORDS[1]}"
  50.  
  51.     if [[ ${COMP_CWORD} -eq 1 ]]; then
  52.         COMPREPLY=( $(compgen -W "create destroy list mount \
  53.        unmount rename activate rollback" -- $cur) )
  54.         return
  55.     fi
  56.  
  57.     case "$cmd" in
  58.         create)
  59.         case "$prev" in
  60.             -e)
  61.             COMPREPLY=( $(compgen -W "$(__beadm_nonactive_list) $(__beadm_snapshot_list)" -- $cur) )
  62.             ;;
  63.             -p)
  64.             COMPREPLY=( $(compgen -W "$(__zpool_list_pools)" -- $cur) )
  65.             ;;
  66.             -o)
  67.             COMPREPLY=( $(compgen -W "$(__zfs_get_editable_properties)" -- $cur) )
  68.             ;;
  69.             *)
  70.             COMPREPLY=( $(compgen -W "-a -d -e -o -p -v $(__beadm_be_at_list)" -- $cur) )
  71.             if [[ ${#COMPREPLY[@]} == 1 && ${COMPREPLY[0]} != -* ]]; then
  72.                 compopt -o nospace
  73.             fi
  74.             ;;
  75.         esac
  76.         ;;
  77.         destroy)
  78.         case "$line" in
  79.             *"-s "*)
  80.             COMPREPLY=( $(compgen -W "$(__beadm_nonactive_list) -f -F -v" -- $cur) )
  81.             ;;
  82.             *)
  83.             COMPREPLY=( $(compgen -W "$(__beadm_snapshot_list) $(__beadm_nonactive_list) -f -s -F -v" -- $cur) )
  84.             ;;
  85.         esac
  86.         ;;
  87.         list)
  88.         case "$line" in
  89.             *"-a "*)
  90.             COMPREPLY=( $(compgen -W "$(__beadm_be_list) -H -v" -- $cur) )
  91.             ;;
  92.             *"-d "*)
  93.             COMPREPLY=( $(compgen -W "$(__beadm_be_list) -s -H -v" -- $cur) )
  94.             ;;
  95.             *"-s "*)
  96.             COMPREPLY=( $(compgen -W "$(__beadm_be_list) -d -H -v" -- $cur) )
  97.             ;;
  98.             *)
  99.             COMPREPLY=( $(compgen -W "$(__beadm_be_list) -a -d -s -H -v" -- $cur) )
  100.             ;;
  101.         esac
  102.         ;;
  103.         mount)
  104.         case "$prev" in
  105.             mount)
  106.             COMPREPLY=( $(compgen -W "$(__beadm_be_list) -v" -- $cur) )
  107.             ;;
  108.             -v)
  109.             COMPREPLY=( $(compgen -W "$(__beadm_be_list)" -- $cur) )
  110.             ;;
  111.             *)
  112.             _cd
  113.             ;;
  114.         esac
  115.         ;;
  116.         unmount)
  117.         COMPREPLY=( $(compgen -W "$(__beadm_unmount_list) -v -f" -- $cur) )
  118.         ;;
  119.         rollback)
  120.         COMPREPLY=( $(compgen -W "$(__beadm_snapshot_list) -v" -- $cur) )
  121.         ;;
  122.         activate)
  123.         COMPREPLY=( $(compgen -W "$(__beadm_nonactive_reboot_list) -v" -- $cur) )
  124.         ;;
  125.     esac
  126.  
  127. }
  128.  
  129. complete -F _beadm beadm
Advertisement
Add Comment
Please, Sign In to add comment