aptq 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #! /bin/bash
  2. # Wrap apt queries in a common memorable syntax
  3. # Because I keep looking this stuff up do to differing comands and syntax.
  4. #
  5. set -e; set -u
  6. ARGV=("$@")
  7. ARGC=("$#")
  8. #ARGV=("${ARGV[@]:1}") # shift ARGV
  9. #ARGC=${#ARGV[@]} # get count
  10. # Helper functions
  11. PROG=`basename "$0" | tr -d '\n'`
  12. function info() { echo `date +%c` ${PROG}\: info: "$@" 1>&2; }
  13. function warn() { echo `date +%c` ${PROG}\: warning: "$@" 1>&2; }
  14. function error() { echo `date +%c` ${PROG}\: error: "$@" 1>&2; }
  15. function debug() { [[ -v DEBUG ]] && echo `date +%c` ${PROG}\: debug: "$@" 1>&2 || true ; }
  16. function die() { echo `date +%c` ${PROG}\: fatal: "$@" 1>&2 && exit 1; }
  17. function usage() {
  18. if [[ "$#" -gt 0 ]]; then
  19. warn $@
  20. fi
  21. cat <<END 1>&2
  22. Usage: aptq QUERY PACKAGE|FILE
  23. where QUERY is one of
  24. installed - is PACKAGE installed?
  25. list - list the files a package provides
  26. provides - what pacakge owns FILE?
  27. END
  28. exit 1
  29. }
  30. query=""
  31. while [ "$ARGC" != "0" ];do
  32. case "${ARGV[0]}" in
  33. -h|--help)
  34. usage
  35. ;;
  36. installed)
  37. query="installed"
  38. ;;
  39. list)
  40. query="list"
  41. ;;
  42. provides)
  43. query="provides"
  44. ;;
  45. *)
  46. if [[ "$1" =~ ^- ]]; then
  47. echo unknown flag $1
  48. usage
  49. else
  50. break
  51. fi
  52. esac
  53. shift
  54. ARGV=("${ARGV[@]:1}") # shift ARGV
  55. ARGC=${#ARGV[@]} # get count
  56. done
  57. debug ARGV ${ARGV[*]}
  58. debug ARGC ${ARGC}
  59. if [ "$query" == "" ]; then
  60. warn "no known query given"
  61. usage
  62. fi
  63. if [ "$query" == "installed" ]; then
  64. if [[ "$ARGC" != "0" ]]; then
  65. warn "extra arguments"
  66. usage
  67. fi
  68. apt list --installed
  69. elif [ "$query" == "list" ]; then
  70. if [[ "$ARGC" < "1" ]]; then
  71. warn "need a PACKAGE name or FILE"
  72. usage
  73. elif [[ "$ARGC" > "1" ]]; then
  74. warn "extra arguments"
  75. usage
  76. fi
  77. dpkg -L ${ARGV[0]}
  78. elif [ "$query" == "provides" ]; then
  79. if [[ "$ARGC" < "1" ]]; then
  80. warn "need a PACKAGE name or FILE"
  81. usage
  82. elif [[ "$ARGC" > "1" ]]; then
  83. warn "extra arguments"
  84. usage
  85. fi
  86. dpkg -S ${ARGV[0]}
  87. fi