Последняя активность 1 month ago

通过命令行下载安装软件

jetsung ревизий этого фрагмента 4 months ago. К ревизии

1 file changed, 2 insertions, 1 deletion

apt.txt

@@ -1 +1,2 @@
1 - cadaver
1 + cadaver
2 + aria2

jetsung ревизий этого фрагмента 4 months ago. К ревизии

1 file changed, 1 insertion

README.md

@@ -4,3 +4,4 @@
4 4 | 名称 | ID (apt) | ID (dnf) | 描述 |
5 5 |:---|:---|:---|:---|
6 6 | cadaver | `cadaver` | | command-line WebDAV client |
7 + | aria2 | `aria2` | `aria2` | High speed download utility |

jetsung ревизий этого фрагмента 4 months ago. К ревизии

1 file changed, 49 insertions, 7 deletions

apt.sh переименован в linux.sh

@@ -1,7 +1,7 @@
1 1 #!/usr/bin/env bash
2 2
3 3 BASE_URL="https://gist.asfd.cn/jetsung/linux/raw/HEAD/"
4 - LIST_FILE="apt.txt" # 默认 apt 包列表文件
4 + LIST_FILE="apt.txt" # 默认列表文件(可被自动切换或 -n 覆盖)
5 5 DESC_FILE="README.md" # 描述 Markdown 文件
6 6 EXTRA=""
7 7 VERBOSE=false # -v: 只显示详细信息,不安装
@@ -20,6 +20,19 @@ parameters() {
20 20 EXTRA="$EXTRA $@"
21 21 }
22 22
23 + # 检测包管理器并返回命令(如 "apt" 或 "dnf" 或 "yum")
24 + detect_package_manager() {
25 + if command -v apt >/dev/null 2>&1; then
26 + echo "apt"
27 + elif command -v dnf >/dev/null 2>&1; then
28 + echo "dnf"
29 + elif command -v yum >/dev/null 2>&1; then
30 + echo "yum"
31 + else
32 + echo "none"
33 + fi
34 + }
35 +
23 36 # 主函数
24 37 main() {
25 38 parameters "$@"
@@ -55,7 +68,7 @@ main() {
55 68 # apt ID(第3列,可能有 ` 或空)
56 69 apt_raw = fields[3]
57 70 gsub(/^[ \t\r\n]+|[ \t\r\n]+$/, "", apt_raw)
58 - gsub(/`/, "", apt_raw) # 去除可能存在的反引号
71 + gsub(/`/, "", apt_raw)
59 72 if (apt_raw == "") apt_raw = "(无)"
60 73
61 74 # dnf ID(第4列,可能为空)
@@ -70,13 +83,42 @@ main() {
70 83
71 84 if (name == "" || desc == "") next
72 85
73 - printf "名称: %s\napt 包名: %s\n dnf 包名: %s\n描述: %s\n\n", name, apt_raw, dnf_raw, desc
86 + printf "名称: %s\napt 包名: %s\ndnf 包名: %s\n描述: %s\n\n", name, apt_raw, dnf_raw, desc
74 87 }'
75 88 echo
76 89 exit 0
77 90 fi
78 91
79 - # 正常模式:下载包列表并使用 apt 安装
92 + # 正常模式:检测包管理器
93 + PM=$(detect_package_manager)
94 +
95 + case "$PM" in
96 + apt)
97 + BASE_CMD="sudo apt install -y"
98 + PM_NAME="apt"
99 + ;;
100 + dnf)
101 + BASE_CMD="sudo dnf install -y"
102 + PM_NAME="dnf"
103 + ;;
104 + yum)
105 + BASE_CMD="sudo yum install -y"
106 + PM_NAME="yum"
107 + ;;
108 + none)
109 + echo "错误: 未检测到支持的包管理器(apt、dnf 或 yum)!" >&2
110 + exit 1
111 + ;;
112 + esac
113 +
114 + # 自动切换列表文件(如果检测到 dnf/yum 且存在 dnf.txt)
115 + if [[ "$PM" == "dnf" || "$PM" == "yum" ]]; then
116 + if [[ "$LIST_FILE" == "apt.txt" ]] && curl -s --head --fail "${BASE_URL}dnf.txt" >/dev/null; then
117 + LIST_FILE="dnf.txt"
118 + echo "检测到 $PM_NAME 系统,自动切换到 dnf.txt 列表文件。"
119 + fi
120 + fi
121 +
80 122 URL_LIST="${BASE_URL}${LIST_FILE}"
81 123 echo "从 $URL_LIST 下载软件列表..."
82 124 SOFTS=$(curl -s --fail "$URL_LIST" | grep -v '^#' | grep -v '^$' | sed '/^$/d')
@@ -86,11 +128,11 @@ main() {
86 128 exit 1
87 129 fi
88 130
89 - # 将列表转为数组,避免管道子 shell 问题
131 + # 将列表转为数组
90 132 mapfile -t soft_array <<< "$SOFTS"
91 133
92 - BASE_CMD="sudo apt install -y"
93 - echo "开始使用 apt 安装软件(命令: $BASE_CMD ... $EXTRA)"
134 + echo "检测到包管理器: $PM_NAME"
135 + echo "开始使用 $PM_NAME 安装软件(命令: $BASE_CMD ... $EXTRA)"
94 136 echo "安装列表:"
95 137 printf '%s\n' "${soft_array[@]}"
96 138 echo "-----------------"

jetsung ревизий этого фрагмента 4 months ago. К ревизии

3 files changed, 115 insertions

README.md(файл создан)

@@ -0,0 +1,6 @@
1 + # Linux 软件推荐
2 +
3 + ## 列表
4 + | 名称 | ID (apt) | ID (dnf) | 描述 |
5 + |:---|:---|:---|:---|
6 + | cadaver | `cadaver` | | command-line WebDAV client |

apt.sh(файл создан)

@@ -0,0 +1,108 @@
1 + #!/usr/bin/env bash
2 +
3 + BASE_URL="https://gist.asfd.cn/jetsung/linux/raw/HEAD/"
4 + LIST_FILE="apt.txt" # 默认 apt 包列表文件
5 + DESC_FILE="README.md" # 描述 Markdown 文件
6 + EXTRA=""
7 + VERBOSE=false # -v: 只显示详细信息,不安装
8 +
9 + # 参数解析
10 + parameters() {
11 + while getopts "e:n:v" opt; do
12 + case $opt in
13 + e) EXTRA="$OPTARG" ;;
14 + n) LIST_FILE="$OPTARG" ;;
15 + v) VERBOSE=true ;;
16 + \?) echo "无效参数: -$OPTARG" >&2; exit 1 ;;
17 + esac
18 + done
19 + shift $((OPTIND - 1))
20 + EXTRA="$EXTRA $@"
21 + }
22 +
23 + # 主函数
24 + main() {
25 + parameters "$@"
26 +
27 + # 如果 LIST_FILE 没有扩展名,自动添加 .txt
28 + if [[ "$LIST_FILE" != *.* ]]; then
29 + LIST_FILE="${LIST_FILE}.txt"
30 + fi
31 +
32 + URL_DESC="${BASE_URL}${DESC_FILE}"
33 +
34 + # -v 模式:解析 README.md 并显示软件详细信息
35 + if $VERBOSE; then
36 + echo "从 $URL_DESC 获取软件描述信息..."
37 + echo
38 + curl -s --fail "$URL_DESC" | awk '
39 + /^\|.*\|.*\|.*\|.*\|$/ && NR > 2 { # 匹配数据行,跳过表头和分隔线
40 + gsub(/^[ \t\r\n]+|[ \t\r\n]+$/, "") # 去除行首尾空白
41 + split($0, fields, "|")
42 + if (length(fields) < 5) next
43 +
44 + # 名称(第2列)
45 + name_raw = fields[2]
46 + gsub(/^[ \t\r\n]+|[ \t\r\n]+$/, "", name_raw)
47 + # 支持 [text](url) 或 **text**
48 + if (match(name_raw, /\[([^]]+)\]/) || match(name_raw, /\*\*([^*]+)\*\*/)) {
49 + name = substr(name_raw, RSTART + (substr(name_raw, RSTART, 1) == "[" ? 1 : 2),
50 + RLENGTH - (substr(name_raw, RSTART, 1) == "[" ? 2 : 4))
51 + } else {
52 + name = name_raw
53 + }
54 +
55 + # apt ID(第3列,可能有 ` 或空)
56 + apt_raw = fields[3]
57 + gsub(/^[ \t\r\n]+|[ \t\r\n]+$/, "", apt_raw)
58 + gsub(/`/, "", apt_raw) # 去除可能存在的反引号
59 + if (apt_raw == "") apt_raw = "(无)"
60 +
61 + # dnf ID(第4列,可能为空)
62 + dnf_raw = fields[4]
63 + gsub(/^[ \t\r\n]+|[ \t\r\n]+$/, "", dnf_raw)
64 + gsub(/`/, "", dnf_raw)
65 + if (dnf_raw == "") dnf_raw = "(无)"
66 +
67 + # 描述(第5列)
68 + desc = fields[5]
69 + gsub(/^[ \t\r\n]+|[ \t\r\n]+$/, "", desc)
70 +
71 + if (name == "" || desc == "") next
72 +
73 + printf "名称: %s\napt 包名: %s\n dnf 包名: %s\n描述: %s\n\n", name, apt_raw, dnf_raw, desc
74 + }'
75 + echo
76 + exit 0
77 + fi
78 +
79 + # 正常模式:下载包列表并使用 apt 安装
80 + URL_LIST="${BASE_URL}${LIST_FILE}"
81 + echo "从 $URL_LIST 下载软件列表..."
82 + SOFTS=$(curl -s --fail "$URL_LIST" | grep -v '^#' | grep -v '^$' | sed '/^$/d')
83 +
84 + if [ -z "$SOFTS" ]; then
85 + echo "错误: 未获取到列表或文件为空!请检查文件名(当前: $LIST_FILE)。" >&2
86 + exit 1
87 + fi
88 +
89 + # 将列表转为数组,避免管道子 shell 问题
90 + mapfile -t soft_array <<< "$SOFTS"
91 +
92 + BASE_CMD="sudo apt install -y"
93 + echo "开始使用 apt 安装软件(命令: $BASE_CMD ... $EXTRA)"
94 + echo "安装列表:"
95 + printf '%s\n' "${soft_array[@]}"
96 + echo "-----------------"
97 +
98 + for soft in "${soft_array[@]}"; do
99 + [ -z "$soft" ] && continue
100 + echo "安装: $soft"
101 + $BASE_CMD "$soft" $EXTRA || echo "警告: 安装 $soft 失败"
102 + done
103 +
104 + echo "-----------------"
105 + echo "所有软件安装完成!"
106 + }
107 +
108 + main "$@"

apt.txt(файл создан)

@@ -0,0 +1 @@
1 + cadaver
Новее Позже