/bash_completion.d/strace

http://github.com/brinkman83/bashrc · #! · 103 lines · 94 code · 9 blank · 0 comment · 0 complexity · 63b7277ed887a91d7a009ffe447bc0ef MD5 · raw file

  1. # bash completion for strace
  2. have strace &&
  3. _strace()
  4. {
  5. local cur prev offset i syscalls arch unistd
  6. # check if we're still completing strace
  7. offset=0
  8. for (( i=1; i <= COMP_CWORD; i++ )); do
  9. case ${COMP_WORDS[$i]} in
  10. -@(o|e|p))
  11. i=$((i+1))
  12. continue
  13. ;;
  14. -*)
  15. continue
  16. ;;
  17. esac
  18. offset=$i
  19. break
  20. done
  21. if [ $offset -gt 0 ]; then
  22. # FAIL: _command_offset is not defined anywhere. Guillame?
  23. _command_offset $offset
  24. else
  25. COMPREPLY=()
  26. cur=`_get_cword`
  27. prev=${COMP_WORDS[COMP_CWORD-1]}
  28. case $prev in
  29. -e)
  30. if [[ "$cur" == *=* ]]; then
  31. prev=${cur/=*/}
  32. cur=${cur/*=/}
  33. # Import arch-specific syscalls -- not foolproof IMHO
  34. #+ --David Paleino
  35. arch=$(command uname -m)
  36. syscalls=$(awk '/^#define __NR/ {print $2}' \
  37. /usr/include/asm/unistd.h | sed -e \
  38. 's/__NR_//')
  39. if [ -z "$syscalls" ]; then
  40. if [[ "$arch" =~ 86$ ]]; then
  41. unistd=/usr/include/asm/unistd_32.h
  42. else
  43. unistd=/usr/include/asm/unistd_64.h
  44. fi
  45. syscalls=$(awk '/^#define __NR/ {print $2}' \
  46. $unistd | sed -e 's/__NR_//')
  47. fi
  48. case $prev in
  49. trace)
  50. COMPREPLY=( $( compgen -W "$syscalls file process \
  51. network signal ipc desc all none" -- "$cur") )
  52. return 0
  53. ;;
  54. esac
  55. else
  56. COMPREPLY=( $( compgen -S"=" -W 'trace abbrev \
  57. verbose raw signal read write' -- "$cur" ) )
  58. fi
  59. return 0
  60. ;;
  61. -o)
  62. _filedir
  63. return 0
  64. ;;
  65. -p)
  66. _pids
  67. return 0
  68. ;;
  69. -S)
  70. COMPREPLY=( $( compgen -W 'time calls name nothing' -- "$cur" ) )
  71. return 0
  72. ;;
  73. -u)
  74. COMPREPLY=( $( compgen -u -- "$cur" ) )
  75. return 0
  76. ;;
  77. esac
  78. if [[ "$cur" == -* ]]; then
  79. COMPREPLY=( $( compgen -W '-c -d -f -ff -F -h --help -i -q \
  80. -r -t -tt -ttt -T -v -V -x -xx -a -e -o -O -p \
  81. -s -S -u -E' -- "$cur" ) )
  82. else
  83. COMPREPLY=( $( compgen -c -- "$cur" ) )
  84. fi
  85. fi
  86. } &&
  87. complete -F _strace $default strace
  88. # Local variables:
  89. # mode: shell-script
  90. # sh-basic-offset: 4
  91. # sh-indent-comment: t
  92. # indent-tabs-mode: nil
  93. # End:
  94. # ex: ts=4 sw=4 et filetype=sh