summaryrefslogtreecommitdiff
path: root/xsh
blob: 9324a6ee8163d1f3d193ef3c44837cf8dd2bae84 (plain)
  1. #!/bin/bash
  2. SCRIPT=$(basename $0)
  3. usage() {
  4. echo "Usage: $SCRIPT [--x] [--verbose] [su|sudo] [[{user}]@{host}] [[--] command...]"
  5. }
  6. termwrapper() {
  7. PRG=$@
  8. if [ "$V" = 1 ]; then
  9. echo $PRG
  10. sleep 4
  11. fi
  12. if [ -n "$PRG" ]; then
  13. x-terminal-emulator -e $PRG &
  14. else
  15. x-terminal-emulator &
  16. fi
  17. }
  18. # Initial setup
  19. SU=''
  20. SUDO=''
  21. X=''
  22. V=''
  23. HOST=''
  24. ssh_opts="-t"
  25. while [ $# -gt 0 ]; do
  26. case $1 in
  27. su) SU=1; SUDO=;;
  28. sudo) SUDO=1; SU=;;
  29. --x|-x|x) X=1; ssh_opts="$ssh_opts -X";;
  30. --verbose|-v) V=1; ssh_opts="$ssh_opts -v";;
  31. --port|-p) ssh_opts="$ssh_opts -p $2"; shift;;
  32. --) shift; break;;
  33. -*) usage; exit 1;;
  34. *@*|@*) HOST=$1;;
  35. *) break;;
  36. esac
  37. shift
  38. done
  39. # Split program name from its options
  40. if [ $# -gt 0 ]; then
  41. prg_base=$1
  42. shift
  43. prg_opts=$@
  44. fi
  45. # Pause for a moment if verbose
  46. if [ "$V" = 1 ]; then
  47. prg_opts="$prg_opts; sleep 4"
  48. fi
  49. if [ -z "$prg_base" ]; then
  50. prg_base='/bin/bash'
  51. fi
  52. prg="$prg_base $prg_opts"
  53. prg_su="echo -n 'Changing to root...: '; su -c \"cd; $prg\""
  54. prg_sudo="sudo -i -- $prg"
  55. case "$HOST" in
  56. '')
  57. if [ -n "$SU" ]; then
  58. termwrapper $prg_su
  59. elif [ -n "$SUDO" ]; then
  60. termwrapper $prg_sudo
  61. else
  62. termwrapper $prg
  63. fi
  64. ;;
  65. @*)
  66. HOST=$(echo "$HOST" | sed 's/^@//')
  67. ;;&
  68. *)
  69. if [ -n "$SU" ]; then
  70. termwrapper ssh $ssh_opts $HOST $prg_su
  71. elif [ -n "$SUDO" ]; then
  72. termwrapper ssh $ssh_opts $HOST $prg_sudo
  73. else
  74. termwrapper ssh $ssh_opts $HOST $prg
  75. fi
  76. ;;
  77. esac