๐Ÿ› ๏ธ dialog – CLI๋กœ Installer ๋งŒ๋“ค๊ธฐ

1โ€“2๋ถ„

CLI ํ™˜๊ฒฝ์—์„œ๋„ ๋Œ€ํ™”ํ˜• UI๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ํ›จ์”ฌ ๋‚˜์•„์ง‘๋‹ˆ๋‹ค. dialog๋Š” ํ„ฐ๋ฏธ๋„์—์„œ ๋ฉ”์‹œ์ง€, ์ž…๋ ฅ์ฐฝ, ๋ฉ”๋‰ด ๋“ฑ์„ ๋„์šธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ, ๊ฐ„๋‹จํ•œ ์„ค์น˜ ๋„์šฐ๋ฏธ๋ถ€ํ„ฐ ์„ค์ • ๋งˆ๋ฒ•์‚ฌ๊นŒ์ง€ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ์˜ˆ์‹œ ํ™”๋ฉด ๋ณด์—ฌ๋“œ๋ฆด๊ฒŒ์š”.

์•„๋ž˜๋Š” dialog๋ฅผ ํ™œ์šฉํ•œ ๊ฐ„๋‹จํ•œ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„๊ณผ ์›ํ•˜๋Š” ํฌํŠธ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์„ค์ • ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.


โœ… ์„ค์น˜ ์ „ ์ค€๋น„

sudo apt update
sudo apt install dialog -y


๐Ÿ“ฆ ์„ค์น˜ ๋„์šฐ๋ฏธ ์Šคํฌ๋ฆฝํŠธ ์˜ˆ์‹œ

#!/bin/bash

# dialog๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
if ! command -v dialog >/dev/null 2>&1; then
    echo "dialog๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ค์น˜ ์ค‘..."
    sudo apt update && sudo apt install dialog -y
fi

# ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ›๊ธฐ
get_user_input() {
    local prompt="$1"
    local default="$2"
    local result

    result=$(dialog --clear --inputbox "$prompt" 10 50 "$default" 2>&1 >/dev/tty)
    local exit_code=$?

    if [ $exit_code -ne 0 ]; then
        echo "์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅ์„ ์ทจ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค."
        exit 1
    fi

    echo "$result"
}

# ์ž…๋ ฅ๊ฐ’ ๋ฐ›๊ธฐ
USERNAME=$(get_user_input "์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”:" "admin")
PORT=$(get_user_input "์‚ฌ์šฉํ•  ํฌํŠธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”:" "8080")

# ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ
CONFIG_FILE="./config.txt"
cat > "$CONFIG_FILE" <<EOF
# ์„ค์ • ํŒŒ์ผ
username=$USERNAME
port=$PORT
EOF

dialog --msgbox "์„ค์ • ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค:\\n$CONFIG_FILE" 8 50
clear


๐Ÿงพ ์‹คํ–‰ ๊ฒฐ๊ณผ

์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋Œ€ํ™”ํ˜• ์ž…๋ ฅ์ฐฝ์ด ํ„ฐ๋ฏธ๋„์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค:

  • ์‚ฌ์šฉ์ž ์ด๋ฆ„ ์ž…๋ ฅ
  • ํฌํŠธ ๋ฒˆํ˜ธ ์ž…๋ ฅ
  • ์™„๋ฃŒ ๋ฉ”์‹œ์ง€

์™„๋ฃŒ ํ›„, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์˜ config.txt ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค:

# ์„ค์ • ํŒŒ์ผ
username=admin
port=8080


๐Ÿ‘ ์ •๋ฆฌ

  • dialog๋Š” ๊ฐ„๋‹จํ•œ ์„ค์น˜ ๋งˆ๋ฒ•์‚ฌ๋‚˜ ์„ค์ • UI๋ฅผ ํ„ฐ๋ฏธ๋„์—์„œ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.
  • GUI ์—†์ด๋„ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ CLI ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๊ผญ ํ™œ์šฉํ•ด๋ณผ ๋งŒํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • ์ž…๋ ฅ, ํ™•์ธ, ๋ฉ”๋‰ด ์„ ํƒ ๋“ฑ ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ํ™•์žฅ์„ฑ๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ์˜ˆ์‹œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ™˜๊ฒฝ์ด๋‚˜ ์„œ๋น„์Šค์— ๋งž๋Š” CLI ๋„์šฐ๋ฏธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”!

ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ฉ”๋‰ด ์ถ”๊ฐ€, ์ฒดํฌ๋ฆฌ์ŠคํŠธ, ์ง„ํ–‰ ๋ฐ”(progress bar) ๋“ฑ๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›ํ•œ๋‹ค๋ฉด ์ฒดํฌ๋ฆฌ์ŠคํŠธ, ๋ฉ”๋‰ด, ๋ฐฑ ๋ฒ„ํŠผ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๋ฒ„์ „๋„ ๋งŒ๋“ค์–ด ๋“œ๋ฆด๊ฒŒ์š”