论坛里有些人无脑吹 ai,挺反感的。 最近用 ai 写个收音机小工具,花了点时间修改才满意。 请大家挑战一下,谁能用更少的提示词实现以下功能(请注明大模式和提示词): 需求:用户打开终端,输入 fm,播放第一电台,并显示带有编号的节目列表,用户输入编号,播放对应的电台,并且电台列表中对应的电台颜色修改红色。
以下是示例:
#!/bin/bash
set -euo pipefail
SUPPORTED_FMS=(
"清晨音乐台,https://lhttp.qingting.fm/live/4915/64k.mp3"
"AsiaFM 亚洲音乐台,https://lhttp.qingting.fm/live/4581/64k.mp3"
)
# 全局变量
CURRENT_PID=""
SELECTED_NUM=""
CURRENT_PLAY_NAME=""
MAX_NUM=${#SUPPORTED_FMS[@]}
print_radio_info() {
echo "节目列表:"
for idx in "${!SUPPORTED_FMS[@]}"; do
IFS=',' read -r name url <<< "${SUPPORTED_FMS[$idx]}"
local num=$((idx + 1))
if [[ "$SELECTED_NUM" =~ ^[0-9]+$ && "$num" -eq "$SELECTED_NUM" ]]; then
printf " \033[31m[%2d] %s\033[0m\n" "$num" "$name"
else
printf " %2d %s\n" "$num" "$name"
fi
done
}
# 播放节目(参数:节目编号)
play_radio() {
local radio_num="$1"
local index=$((radio_num - 1))
IFS=',' read -r radio_name radio_url <<< "${SUPPORTED_FMS[$index]}"
if ps -p "$CURRENT_PID" >/dev/null 2>&1; then
kill "$CURRENT_PID" >/dev/null 2>&1
wait "$CURRENT_PID" 2>/dev/null
fi
SELECTED_NUM="$radio_num"
CURRENT_PLAY_NAME="$radio_name"
mpg123 -q "$radio_url" >/dev/null 2>&1 < /dev/null &
CURRENT_PID=$!
if ! ps -p "$CURRENT_PID" >/dev/null; then
echo -e "播放失败!请检查网络连接或 mpg123 是否安装。"
CURRENT_PID=""
CURRENT_PLAY_NAME=""
SELECTED_NUM=""
fi
}
main_loop() {
while true; do
clear
print_radio_info
read -r -p "请输入节目编号( 1-$MAX_NUM )或 q 退出: " user_input
if [[ "$user_input" =~ ^[qQ]$ ]]; then
echo "正在退出播放器..."
if ps -p "$CURRENT_PID" >/dev/null 2>&1; then
kill "$CURRENT_PID" >/dev/null 2>&1
wait "$CURRENT_PID" 2>/dev/null
fi
clear
exit 0
fi
if ! [[ "$user_input" =~ ^[0-9]+$ ]]; then
echo -n "错误:请输入有效的数字或 q 退出!"
sleep 1
continue
fi
if [[ "$user_input" -lt 1 || "$user_input" -gt "$MAX_NUM" ]]; then
echo -n "错误:无效的节目编号!请输入 1-$MAX_NUM 之间的数字"
sleep 1
continue
fi
play_radio "$user_input"
done
}
# 程序入口
play_radio 1
main_loop
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.