Fix stdin redirection for curl | bash execution - add /dev/tty to all read commands

This commit is contained in:
2025-12-23 13:04:04 +09:00
parent 07d749a66b
commit 638546a554

View File

@ -4,6 +4,7 @@
# root 계정에서 실행
# Linux / DB 계정 통합 여부 선택 가능
# dotfiles는 git에서 다운로드
# 파이프 실행 지원 (curl | bash)
set -euo pipefail
@ -14,6 +15,21 @@ DOTFILES_BASE_URL="https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch
LINUX_USER=""
DB_USER=""
# 터미널 입력 헬퍼 함수
# curl | bash로 실행할 때 /dev/tty에서 입력을 받도록 함
read_input() {
local prompt="$1"
local var_name="$2"
local is_secret="${3:-false}"
if [ "$is_secret" = "true" ]; then
read -s -p "$prompt" "$var_name" < /dev/tty
echo "" >&2
else
read -p "$prompt" "$var_name" < /dev/tty
fi
}
# 오류 처리 및 초기화 함수
cleanup() {
EXIT_CODE=$?
@ -25,7 +41,7 @@ cleanup() {
# LINUX_USER가 설정되어 있으면 초기화 옵션 제공
if [ -n "$LINUX_USER" ]; then
read -p "초기화하고 다시 시작하시겠습니까? (y/n): " REINIT
read_input "초기화하고 다시 시작하시겠습니까? (y/n): " REINIT
if [[ "$REINIT" =~ ^[Yy]$ ]]; then
echo ""
echo "⚠️ $LINUX_USER 사용자 및 관련 설정을 초기화합니다..."
@ -76,7 +92,7 @@ echo "✓ 필수 패키지 설치 완료"
# -------------------------------------------------
# 2. Linux 사용자 정보 입력
# -------------------------------------------------
read -p "Linux 사용자 이름: " LINUX_USER
read_input "Linux 사용자 이름: " LINUX_USER
# 사용자 존재 확인 및 재생성 옵션
if id "$LINUX_USER" &>/dev/null; then
@ -86,11 +102,11 @@ if id "$LINUX_USER" &>/dev/null; then
echo " 1) 기존 사용자 사용 (비밀번호는 변경하지 않음)"
echo " 2) 사용자 삭제 후 재생성 (홈 디렉토리 포함 삭제)"
echo ""
read -p "선택 (1 또는 2): " USER_ACTION
read_input "선택 (1 또는 2): " USER_ACTION
case $USER_ACTION in
2)
read -p "정말로 '$LINUX_USER'을(를) 삭제하고 재생성하시겠습니까? (y/n): " CONFIRM
read_input "정말로 '$LINUX_USER'을(를) 삭제하고 재생성하시겠습니까? (y/n): " CONFIRM
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
echo "사용자 삭제 중..."
userdel -r "$LINUX_USER" 2>/dev/null || userdel "$LINUX_USER" 2>/dev/null || true
@ -98,7 +114,7 @@ if id "$LINUX_USER" &>/dev/null; then
# 새 비밀번호 입력 (재시도 옵션)
while true; do
read -s -p "새로운 Linux 사용자 비밀번호: " LINUX_PW
read -s -p "새로운 Linux 사용자 비밀번호: " LINUX_PW < /dev/tty
echo ""
# 비밀번호 입력 확인
@ -107,12 +123,12 @@ if id "$LINUX_USER" &>/dev/null; then
continue
fi
read -s -p "Linux 사용자 비밀번호 확인: " LINUX_PW_CONFIRM
read -s -p "Linux 사용자 비밀번호 확인: " LINUX_PW_CONFIRM < /dev/tty
echo ""
if [[ "$LINUX_PW" != "$LINUX_PW_CONFIRM" ]]; then
echo "❌ Linux 사용자 비밀번호가 일치하지 않습니다."
read -p "다시 입력하시겠습니까? (Y/n): " RETRY_PW_2
read -p "다시 입력하시겠습니까? (Y/n): " RETRY_PW_2 < /dev/tty
RETRY_PW_2=${RETRY_PW_2:-Y}
if [[ ! "$RETRY_PW_2" =~ ^[Yy]$ ]]; then
echo "비밀번호 입력을 취소했습니다."
@ -137,7 +153,7 @@ if id "$LINUX_USER" &>/dev/null; then
else
# 새 사용자 생성 (비밀번호 입력)
while true; do
read -s -p "Linux 사용자 비밀번호: " LINUX_PW
read -s -p "Linux 사용자 비밀번호: " LINUX_PW < /dev/tty
echo ""
# 비밀번호 입력 확인
@ -146,16 +162,16 @@ else
continue
fi
read -s -p "Linux 사용자 비밀번호 확인: " LINUX_PW_CONFIRM
read -s -p "Linux 사용자 비밀번호 확인: " LINUX_PW_CONFIRM < /dev/tty
echo ""
if [[ "$LINUX_PW" != "$LINUX_PW_CONFIRM" ]]; then
echo "❌ Linux 사용자 비밀번호가 일치하지 않습니다."
read -p "다시 입력하시겠습니까? (Y/n): " RETRY_PW
read -p "다시 입력하시겠습니까? (Y/n): " RETRY_PW < /dev/tty
RETRY_PW=${RETRY_PW:-Y}
if [[ ! "$RETRY_PW" =~ ^[Yy]$ ]]; then
echo ""
read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT
read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT < /dev/tty
RESTART_SCRIPT=${RESTART_SCRIPT:-Y}
if [[ "$RESTART_SCRIPT" =~ ^[Yy]$ ]]; then
exit 1
@ -172,7 +188,7 @@ else
fi
# MariaDB 계정 설정
read -p "MariaDB 계정을 Linux 계정과 동일하게 사용할까요? (Y/n): " SAME_ACCOUNT
read -p "MariaDB 계정을 Linux 계정과 동일하게 사용할까요? (Y/n): " SAME_ACCOUNT < /dev/tty
SAME_ACCOUNT=${SAME_ACCOUNT:-Y}
if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then
@ -182,7 +198,7 @@ if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then
else
# 기존 사용자의 경우 비밀번호 입력
while true; do
read -s -p "MariaDB 비밀번호: " DB_PW
read -s -p "MariaDB 비밀번호: " DB_PW < /dev/tty
echo ""
# 비밀번호 입력 확인
@ -191,16 +207,16 @@ if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then
continue
fi
read -s -p "MariaDB 비밀번호 확인: " DB_PW_CONFIRM
read -s -p "MariaDB 비밀번호 확인: " DB_PW_CONFIRM < /dev/tty
echo ""
if [[ "$DB_PW" != "$DB_PW_CONFIRM" ]]; then
echo "❌ MariaDB 비밀번호가 일치하지 않습니다."
read -p "다시 입력하시겠습니까? (Y/n): " RETRY_DB_PW
read -p "다시 입력하시겠습니까? (Y/n): " RETRY_DB_PW < /dev/tty
RETRY_DB_PW=${RETRY_DB_PW:-Y}
if [[ ! "$RETRY_DB_PW" =~ ^[Yy]$ ]]; then
echo ""
read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT2
read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT2 < /dev/tty
RESTART_SCRIPT2=${RESTART_SCRIPT2:-Y}
if [[ "$RESTART_SCRIPT2" =~ ^[Yy]$ ]]; then
exit 1
@ -216,10 +232,10 @@ if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then
fi
echo "→ DB 사용자/비밀번호를 Linux 계정과 동일하게 사용합니다."
else
read -p "MariaDB 사용자 이름: " DB_USER
read -p "MariaDB 사용자 이름: " DB_USER < /dev/tty
# MariaDB 사용자 비밀번호 입력 (재시도 옵션)
while true; do
read -s -p "MariaDB 사용자 비밀번호: " DB_PW
read -s -p "MariaDB 사용자 비밀번호: " DB_PW < /dev/tty
echo ""
# 비밀번호 입력 확인
@ -228,16 +244,16 @@ else
continue
fi
read -s -p "MariaDB 사용자 비밀번호 확인: " DB_PW_CONFIRM
read -s -p "MariaDB 사용자 비밀번호 확인: " DB_PW_CONFIRM < /dev/tty
echo ""
if [[ "$DB_PW" != "$DB_PW_CONFIRM" ]]; then
echo "❌ MariaDB 비밀번호가 일치하지 않습니다."
read -p "다시 입력하시겠습니까? (Y/n): " RETRY_DB_PW2
read -p "다시 입력하시겠습니까? (Y/n): " RETRY_DB_PW2 < /dev/tty
RETRY_DB_PW2=${RETRY_DB_PW2:-Y}
if [[ ! "$RETRY_DB_PW2" =~ ^[Yy]$ ]]; then
echo ""
read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT3
read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT3 < /dev/tty
RESTART_SCRIPT3=${RESTART_SCRIPT3:-Y}
if [[ "$RESTART_SCRIPT3" =~ ^[Yy]$ ]]; then
exit 1
@ -363,7 +379,7 @@ EXISTING_USER=$(mysql -u root -se "SELECT COUNT(*) FROM mysql.user WHERE User='$
if [ "$EXISTING_USER" -gt 0 ]; then
echo "⚠️ DB 사용자 '$DB_USER'이(가) 이미 존재합니다."
read -p "기존 사용자의 비밀번호를 변경하시겠습니까? (Y/n): " UPDATE_PW
read -p "기존 사용자의 비밀번호를 변경하시겠습니까? (Y/n): " UPDATE_PW < /dev/tty
UPDATE_PW=${UPDATE_PW:-Y}
if [[ "$UPDATE_PW" =~ ^[Yy]$ ]]; then
mysql -u root <<MYSQL_UPDATE