Created
October 28, 2016 03:26
-
-
Save malte70/4085f89ad906b7f623f06f9b1f9984b4 to your computer and use it in GitHub Desktop.
Simple sudo for Termux (tested on CyanogenMod)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/data/data/com.termux/files/usr/bin/bash | |
| # | |
| # sudo-termux | |
| # sudo for Termux/Android | |
| # | |
| # Copyright (c) 2016 Malte Bublitz, http://malte70.bplaced.net | |
| # All rights reserved. | |
| # | |
| SCRIPT_NAME="sudo" | |
| SCRIPT_VERSION="0.2" | |
| SCRIPT_DESCRIPTION="sudo for Termux by github.com/malte70" | |
| ############### | |
| # Configuration | |
| # root's home directory | |
| ROOT_HOME="${HOME}/.sudo_home" | |
| # shell (~root/.shell, default bash) | |
| ROOT_SHELL="${ROOT_HOME}/.shell" | |
| if [[ ! -x "${ROOT_SHELL}" ]]; then | |
| ROOT_SHELL="${PREFIX}/bin/bash" | |
| fi | |
| # path to env and su binary | |
| ENV="/system/bin/env" | |
| SU="/system/xbin/su" | |
| # | |
| ############### | |
| # | |
| # parse arguments and set $CMD | |
| # | |
| # Variables set via env: | |
| # - sudo_pwd | |
| # - LD_LIBRARY_PATH | |
| # - HOME | |
| CMD="${ENV} sudo_pwd=$PWD" | |
| CMD="${CMD} LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" | |
| CMD="${CMD} HOME=${ROOT_HOME}" | |
| opt="${1}" | |
| if [[ "${1}" == "--version" || "${1}" == "-V" ]] | |
| then | |
| echo "${SCRIPT_NAME} ${SCRIPT_VERSION}" | |
| echo "${SCRIPT_DESCRIPTION}" | |
| exit 0 | |
| elif [[ "${1}" == "--help" || "${1}" == "-h" ]] | |
| then | |
| echo "Usage:" | |
| #echo " ${SCRIPT_NAME}" | |
| echo " ${SCRIPT_NAME} <option>" #[-i|--help|--version]" | |
| echo " ${SCRIPT_NAME} *command*" | |
| echo | |
| echo "Options:" | |
| echo " -i Start a shell" | |
| echo " -h, --help Show this help" | |
| echo " -V, --version Display the version" | |
| echo | |
| echo "Only single options accepted. No" | |
| echo "arguments behaves like \`-i\`" | |
| exit 0 | |
| elif [[ "${1}" == "-i" || $# -eq 0 ]] | |
| then | |
| # New login shell | |
| CMD="${CMD} ${ROOT_SHELL}" | |
| else | |
| # Execute command as root | |
| CMD="${CMD} ${ROOT_HOME}/.sudo_run.sh" | |
| CMD="${CMD} ${@}" | |
| fi | |
| # | |
| # Create home if necessary | |
| # | |
| if [[ ! -d "${ROOT_HOME}" ]]; then | |
| mkdir -p "${ROOT_HOME}" | |
| # Initialize a .bashrc | |
| ( | |
| echo '# ';echo '# Minimal .bashrc for root/sudo' | |
| echo '# '; echo | |
| echo '# Keep current directory' | |
| echo 'cd "${sudo_pwd}"' #; unset sudo_pwd' | |
| echo 'export PS1="\[\033[1;31m\]\w\[\033[0m\]# "' | |
| echo 'export PATH="/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets"' | |
| echo | |
| echo 'alias ..="cd .."' | |
| echo 'alias ls="ls --color=auto -h"' | |
| echo; echo 'umask 0000' | |
| ) > "${ROOT_HOME}/.bashrc" | |
| chmod 666 "${ROOT_HOME}/.bashrc" | |
| ( | |
| echo "#!$PREFIX/bin/bash"; echo | |
| echo 'cd "$sudo_pwd"' | |
| echo 'export PATH="/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets"' | |
| echo; echo 'exec $@' | |
| ) > "${ROOT_HOME}/.sudo_run.sh" | |
| chmod 777 "${ROOT_HOME}/.sudo_run.sh" | |
| echo "sudo: Created initial home for root in" | |
| echo " $(echo "${ROOT_HOME}" | sed "s|$HOME|~|g")" | |
| fi | |
| # | |
| # Check if .sudo_run.sh exists | |
| # Skip this if we are about to | |
| # run a shell session | |
| # | |
| if [[ "${CMD}" == *.sudo_run.sh* ]]; then | |
| if [[ ! -x "${ROOT_HOME}/.sudo_run.sh" ]]; then | |
| echo "${SCRIPT_NAME}: .sudo_run.sh not found in root's home!" >&2 | |
| exit 2 | |
| fi | |
| fi | |
| # | |
| # Execute $CMD | |
| # | |
| exec $SU -c "${CMD}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi Malte,
I want to run above mentioned script on termux terminal on Android but I am unable to run. Please guide me how to run.
Thanks