fix(install): Improve interactive mode detection and non-interactive installation handling in install.sh
This commit is contained in:
		| @@ -1,5 +1,13 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
|  | ## 2025-03-25 - 2.4.4 - fix(install) | ||||||
|  | Improve interactive mode detection and non-interactive installation handling in install.sh | ||||||
|  |  | ||||||
|  | - Detect and warn when running without a controlling terminal | ||||||
|  | - Attempt to use /dev/tty for user input when possible | ||||||
|  | - Update prompts and error messages for auto-installation of dependencies | ||||||
|  | - Clarify installation instructions in readme for interactive and non-interactive modes | ||||||
|  |  | ||||||
| ## 2025-03-25 - 2.4.3 - fix(readme) | ## 2025-03-25 - 2.4.3 - fix(readme) | ||||||
| Update Quick Install command syntax in readme for auto-yes installation | Update Quick Install command syntax in readme for auto-yes installation | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										36
									
								
								install.sh
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								install.sh
									
									
									
									
									
								
							| @@ -50,11 +50,35 @@ fi | |||||||
|  |  | ||||||
| # Detect if script is being piped or run directly | # Detect if script is being piped or run directly | ||||||
| PIPED=0 | PIPED=0 | ||||||
|  | INTERACTIVE=1 | ||||||
| if [ ! -t 0 ]; then | if [ ! -t 0 ]; then | ||||||
|   # Being piped, need to clone the repo |   # Being piped, need to clone the repo | ||||||
|   PIPED=1 |   PIPED=1 | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | # Check if stdin is a terminal | ||||||
|  | if [ ! -t 0 ] || [ ! -t 1 ]; then | ||||||
|  |   # Either stdin or stdout is not a terminal, check if -y was provided | ||||||
|  |   if [ $AUTO_YES -ne 1 ]; then | ||||||
|  |     echo "Warning: Running in non-interactive mode without -y flag." | ||||||
|  |     echo "Will ask for confirmation via controlling terminal." | ||||||
|  |     # Try to use a controlling terminal for user input | ||||||
|  |     if [ -t 1 ]; then | ||||||
|  |       # Stdout is a terminal, use it | ||||||
|  |       exec < /dev/tty 2>/dev/null || INTERACTIVE=0 | ||||||
|  |     else | ||||||
|  |       # Try to find controlling terminal | ||||||
|  |       exec < /dev/tty 2>/dev/null || INTERACTIVE=0 | ||||||
|  |     fi | ||||||
|  |      | ||||||
|  |     if [ $INTERACTIVE -eq 0 ]; then | ||||||
|  |       echo "No controlling terminal available. To run non-interactively, use:" | ||||||
|  |       echo "  curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash -s -- -y" | ||||||
|  |       exit 1 | ||||||
|  |     fi | ||||||
|  |   fi | ||||||
|  | fi | ||||||
|  |  | ||||||
| # Helper function to detect OS type | # Helper function to detect OS type | ||||||
| detect_os() { | detect_os() { | ||||||
|   if [ -f /etc/os-release ]; then |   if [ -f /etc/os-release ]; then | ||||||
| @@ -141,8 +165,10 @@ if [ $PIPED -eq 1 ]; then | |||||||
|     if [ $AUTO_YES -eq 1 ]; then |     if [ $AUTO_YES -eq 1 ]; then | ||||||
|       echo "Auto-installing git (-y flag provided)..." |       echo "Auto-installing git (-y flag provided)..." | ||||||
|       install_git |       install_git | ||||||
|     else |     elif [ $INTERACTIVE -eq 1 ]; then | ||||||
|       read -p "Would you like to install git now? (y/N): " install_git_prompt |       # If interactive and no -y flag, ask the user | ||||||
|  |       echo "Would you like to install git now? (y/N): " | ||||||
|  |       read -r install_git_prompt | ||||||
|        |        | ||||||
|       if [[ "$install_git_prompt" =~ ^[Yy]$ ]]; then |       if [[ "$install_git_prompt" =~ ^[Yy]$ ]]; then | ||||||
|         install_git |         install_git | ||||||
| @@ -152,6 +178,12 @@ if [ $PIPED -eq 1 ]; then | |||||||
|         echo "  sudo bash install.sh -y" |         echo "  sudo bash install.sh -y" | ||||||
|         exit 1 |         exit 1 | ||||||
|       fi |       fi | ||||||
|  |     else | ||||||
|  |       # Non-interactive mode without -y flag | ||||||
|  |       echo "Error: Git is required but not installed." | ||||||
|  |       echo "In non-interactive mode, use -y flag to auto-install dependencies:" | ||||||
|  |       echo "  curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash -s -- -y" | ||||||
|  |       exit 1 | ||||||
|     fi |     fi | ||||||
|   fi |   fi | ||||||
|    |    | ||||||
|   | |||||||
| @@ -20,6 +20,11 @@ NUPST is a command-line tool that monitors SNMP-enabled UPS devices and initiate | |||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| # Install directly without cloning the repository (requires root privileges) | # Install directly without cloning the repository (requires root privileges) | ||||||
|  | # This will interactively prompt for installing any dependencies | ||||||
|  | curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash | ||||||
|  |  | ||||||
|  | # Install with auto-yes for dependencies (will install git automatically if needed)  | ||||||
|  | # Use this for automated/non-interactive installations | ||||||
| curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash -c "bash -s -- -y" | curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash -c "bash -s -- -y" | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,6 +3,6 @@ | |||||||
|  */ |  */ | ||||||
| export const commitinfo = { | export const commitinfo = { | ||||||
|   name: '@serve.zone/nupst', |   name: '@serve.zone/nupst', | ||||||
|   version: '2.4.3', |   version: '2.4.4', | ||||||
|   description: 'Node.js UPS Shutdown Tool for SNMP-enabled UPS devices' |   description: 'Node.js UPS Shutdown Tool for SNMP-enabled UPS devices' | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user