瀏覽代碼

Исправлен ввод при curl | bash: чтение из /dev/tty

- Добавлен хелпер read_from_tty() который читает из /dev/tty если stdin — пайп
- Теперь интерактивный ввод работает при curl | bash
neyrogovnarik 1 月之前
父節點
當前提交
36ab06ab82
共有 1 個文件被更改,包括 22 次插入6 次删除
  1. 22 6
      deploy/deploy-remote.sh

+ 22 - 6
deploy/deploy-remote.sh

@@ -116,14 +116,32 @@ setup_env() {
     generate_secret "JWT_REFRESH_SECRET"
     generate_secret "S3_SECRET_KEY"
 
+    # Хелпер для чтения из терминала (работает и при curl | bash)
+    read_from_tty() {
+        local prompt="$1"
+        local var_name="$2"
+        if [ -t 0 ]; then
+            # stdin — терминал
+            echo -n "$prompt"
+            read -r "$var_name"
+        elif [ -e /dev/tty ]; then
+            # stdin — пайп, но есть /dev/tty
+            echo -n "$prompt" > /dev/tty
+            read -r "$var_name" < /dev/tty
+        else
+            # Нет доступа к терминалу
+            log_warn "Нет интерактивного терминала, пропуск ввода $var_name"
+            eval "$var_name=\"\""
+        fi
+    }
+
     # Интерактивный ввод YANDEX_MAPS_API_KEY если не задан
     prompt_for_yandex_key() {
         local current="${YANDEX_MAPS_API_KEY:-}"
         if [ -z "$current" ] || [[ "$current" == *"CHANGE_ME"* ]] || [[ "$current" == *"ВАШ_КЛЮЧ"* ]]; then
             echo
             log_warn "YANDEX_MAPS_API_KEY не задан (нужен для работы карт на фронтенде)"
-            echo -n "Введите Яндекс.Карты API ключ (или Enter чтобы пропустить): "
-            read -r yandex_key
+            read_from_tty "Введите Яндекс.Карты API ключ (или Enter чтобы пропустить): " yandex_key
             if [ -n "$yandex_key" ]; then
                 if [[ "$OSTYPE" == "darwin"* ]]; then
                     sed -i '' "s/^YANDEX_MAPS_API_KEY=.*/YANDEX_MAPS_API_KEY=${yandex_key}/" "$ENV_FILE"
@@ -147,8 +165,7 @@ setup_env() {
         if [ -z "$public_id" ] || [ -z "$api_secret" ]; then
             echo
             log_info "CloudPayments (опционально, для платежей):"
-            echo -n "CLOUDPAYMENTS_PUBLIC_ID (Enter чтобы пропустить): "
-            read -r cp_public
+            read_from_tty "CLOUDPAYMENTS_PUBLIC_ID (Enter чтобы пропустить): " cp_public
             if [ -n "$cp_public" ]; then
                 if [[ "$OSTYPE" == "darwin"* ]]; then
                     sed -i '' "s/^CLOUDPAYMENTS_PUBLIC_ID=.*/CLOUDPAYMENTS_PUBLIC_ID=${cp_public}/" "$ENV_FILE"
@@ -157,8 +174,7 @@ setup_env() {
                 fi
                 export CLOUDPAYMENTS_PUBLIC_ID="$cp_public"
             fi
-            echo -n "CLOUDPAYMENTS_API_SECRET (Enter чтобы пропустить): "
-            read -r cp_secret
+            read_from_tty "CLOUDPAYMENTS_API_SECRET (Enter чтобы пропустить): " cp_secret
             if [ -n "$cp_secret" ]; then
                 if [[ "$OSTYPE" == "darwin"* ]]; then
                     sed -i '' "s/^CLOUDPAYMENTS_API_SECRET=.*/CLOUDPAYMENTS_API_SECRET=${cp_secret}/" "$ENV_FILE"