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