修复v2: 改进stdin重定向方式
- 移除全局 exec < /dev/tty,避免管道执行中断 - 在每个read命令中单独指定 < /dev/tty - 兼容 curl|bash 和 bash <(...) 两种执行方式 - 版本号 v1.0.2
This commit is contained in:
33
install.sh
33
install.sh
@@ -8,9 +8,6 @@
|
||||
|
||||
set -e
|
||||
|
||||
# 重定向标准输入到终端,解决管道执行时无法读取用户输入的问题
|
||||
exec < /dev/tty
|
||||
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
@@ -167,7 +164,7 @@ choose_mirror() {
|
||||
echo ""
|
||||
|
||||
while true; do
|
||||
read -p "请输入选项 [1-2]: " mirror_choice
|
||||
read -p "请输入选项 [1-2]: " mirror_choice < /dev/tty
|
||||
case $mirror_choice in
|
||||
1)
|
||||
print_info "使用官方源"
|
||||
@@ -325,7 +322,7 @@ choose_access_mode() {
|
||||
echo ""
|
||||
|
||||
while true; do
|
||||
read -p "请输入选项 [1-2]: " mode_choice
|
||||
read -p "请输入选项 [1-2]: " mode_choice < /dev/tty
|
||||
case $mode_choice in
|
||||
1)
|
||||
USE_DOMAIN=true
|
||||
@@ -349,7 +346,7 @@ choose_access_mode() {
|
||||
configure_domain() {
|
||||
echo ""
|
||||
while true; do
|
||||
read -p "请输入您的域名 (例如: wwy.example.com): " DOMAIN
|
||||
read -p "请输入您的域名 (例如: wwy.example.com): " DOMAIN < /dev/tty
|
||||
if [[ -z "$DOMAIN" ]]; then
|
||||
print_error "域名不能为空"
|
||||
continue
|
||||
@@ -373,7 +370,7 @@ configure_domain() {
|
||||
print_warning "域名未解析到当前服务器IP"
|
||||
print_info "域名解析IP: $DOMAIN_IP"
|
||||
print_info "当前服务器IP: $PUBLIC_IP"
|
||||
read -p "是否继续? (y/n): " continue_choice
|
||||
read -p "是否继续? (y/n): " continue_choice < /dev/tty
|
||||
if [[ "$continue_choice" == "y" || "$continue_choice" == "Y" ]]; then
|
||||
break
|
||||
fi
|
||||
@@ -413,7 +410,7 @@ choose_ssl_method() {
|
||||
echo ""
|
||||
|
||||
while true; do
|
||||
read -p "请输入选项 [1-8]: " ssl_choice
|
||||
read -p "请输入选项 [1-8]: " ssl_choice < /dev/tty
|
||||
case $ssl_choice in
|
||||
1|2|3|4|5|6|7|8)
|
||||
SSL_METHOD=$ssl_choice
|
||||
@@ -472,7 +469,7 @@ ssl_fallback() {
|
||||
echo ""
|
||||
|
||||
while true; do
|
||||
read -p "请选择备选方案 [2-4/8]: " retry_choice
|
||||
read -p "请选择备选方案 [2-4/8]: " retry_choice < /dev/tty
|
||||
case $retry_choice in
|
||||
2)
|
||||
deploy_acme_letsencrypt && return 0
|
||||
@@ -589,8 +586,8 @@ deploy_aliyun_ssl() {
|
||||
|
||||
print_warning "此功能需要您提供阿里云AccessKey"
|
||||
echo ""
|
||||
read -p "阿里云AccessKey ID: " ALIYUN_ACCESS_KEY_ID
|
||||
read -p "阿里云AccessKey Secret: " ALIYUN_ACCESS_KEY_SECRET
|
||||
read -p "阿里云AccessKey ID: " ALIYUN_ACCESS_KEY_ID < /dev/tty
|
||||
read -p "阿里云AccessKey Secret: " ALIYUN_ACCESS_KEY_SECRET < /dev/tty
|
||||
|
||||
# 这里需要调用阿里云API申请证书
|
||||
# 暂时返回失败,提示用户使用其他方案
|
||||
@@ -603,8 +600,8 @@ deploy_tencent_ssl() {
|
||||
|
||||
print_warning "此功能需要您提供腾讯云SecretKey"
|
||||
echo ""
|
||||
read -p "腾讯云SecretId: " TENCENT_SECRET_ID
|
||||
read -p "腾讯云SecretKey: " TENCENT_SECRET_KEY
|
||||
read -p "腾讯云SecretId: " TENCENT_SECRET_ID < /dev/tty
|
||||
read -p "腾讯云SecretKey: " TENCENT_SECRET_KEY < /dev/tty
|
||||
|
||||
# 这里需要调用腾讯云API申请证书
|
||||
# 暂时返回失败,提示用户使用其他方案
|
||||
@@ -620,7 +617,7 @@ deploy_manual_ssl() {
|
||||
print_info "- 证书文件: /tmp/ssl_cert.crt"
|
||||
print_info "- 私钥文件: /tmp/ssl_key.key"
|
||||
echo ""
|
||||
read -p "上传完成后按回车继续..."
|
||||
read -p "上传完成后按回车继续..." < /dev/tty
|
||||
|
||||
if [[ -f /tmp/ssl_cert.crt ]] && [[ -f /tmp/ssl_key.key ]]; then
|
||||
mkdir -p /etc/nginx/ssl
|
||||
@@ -644,7 +641,7 @@ create_project_directory() {
|
||||
|
||||
if [[ -d "$PROJECT_DIR" ]]; then
|
||||
print_warning "项目目录已存在"
|
||||
read -p "是否删除并重新创建? (y/n): " recreate
|
||||
read -p "是否删除并重新创建? (y/n): " recreate < /dev/tty
|
||||
if [[ "$recreate" == "y" || "$recreate" == "Y" ]]; then
|
||||
rm -rf "$PROJECT_DIR"
|
||||
else
|
||||
@@ -683,7 +680,7 @@ configure_admin_account() {
|
||||
echo ""
|
||||
|
||||
while true; do
|
||||
read -p "管理员用户名 [默认: admin]: " ADMIN_USERNAME
|
||||
read -p "管理员用户名 [默认: admin]: " ADMIN_USERNAME < /dev/tty
|
||||
ADMIN_USERNAME=${ADMIN_USERNAME:-admin}
|
||||
|
||||
if [[ ${#ADMIN_USERNAME} -lt 3 ]]; then
|
||||
@@ -694,14 +691,14 @@ configure_admin_account() {
|
||||
done
|
||||
|
||||
while true; do
|
||||
read -s -p "管理员密码(至少6位): " ADMIN_PASSWORD
|
||||
read -s -p "管理员密码(至少6位): " ADMIN_PASSWORD < /dev/tty
|
||||
echo ""
|
||||
if [[ ${#ADMIN_PASSWORD} -lt 6 ]]; then
|
||||
print_error "密码至少6个字符"
|
||||
continue
|
||||
fi
|
||||
|
||||
read -s -p "确认密码: " ADMIN_PASSWORD_CONFIRM
|
||||
read -s -p "确认密码: " ADMIN_PASSWORD_CONFIRM < /dev/tty
|
||||
echo ""
|
||||
if [[ "$ADMIN_PASSWORD" != "$ADMIN_PASSWORD_CONFIRM" ]]; then
|
||||
print_error "两次密码不一致"
|
||||
|
||||
Reference in New Issue
Block a user