13
13
# ---------------------------------------------------------------
14
14
15
15
install_dir=" "
16
+ version=" pre"
16
17
path_to_executable=" "
17
18
default_install_path=" /usr/local/bin"
19
+ noroot_default_install_path=" $HOME /.local/bin"
18
20
binary_name=" chsrc"
19
- version=" "
21
+ temp_install_dir=" " # 用于存储临时安装目录
22
+ helpflag=0
23
+ lan=" zh"
20
24
25
+ # 输出相关信息
21
26
info () {
22
27
echo " [INFO] $* "
23
28
}
24
29
30
+ # 输出错误到stdout和stderr
25
31
error () {
26
32
echo -e " [ERROR] $* " >&2
27
33
exit 1
28
34
}
29
35
36
+ # 显示 chsrc 安装程序的帮助信息,包括使用说明和可用选项
30
37
help () {
31
- echo " chsrc-installer: Install chsrc on any Unix-like OS and any architect "
32
- echo
33
- echo " 使用: install.sh [options]"
34
- echo " 选项:"
35
- echo " -h 打印此帮助信息"
36
- echo " -d <destination> 指定安装目录,默认为 /usr/local/bin;若已安装,则覆盖旧版本"
37
- echo " -v <version> 指定chsrc版本"
38
- echo
38
+ if [ " $lan " = " zh" ]; then
39
+ echo " chsrc-installer: 在任何类Unix操作系统上安装 chsrc"
40
+ echo
41
+ echo " 使用: install.sh [选项]"
42
+ echo " 选项:"
43
+ echo " -h 打印此帮助信息"
44
+ echo " -d <destination> 指定安装目录,默认为 /usr/local/bin;若已安装,则覆盖旧版本"
45
+ echo " -v <version> 指定 chsrc 版本"
46
+ echo " -l <language> 指定脚本语言,支持 zh 和 en "
47
+ echo
48
+ else
49
+ echo " chsrc-installer: Install chsrc on any Unix-like OS"
50
+ echo
51
+ echo " Usage: install.sh [options]"
52
+ echo " Options:"
53
+ echo " -h Print this help information"
54
+ echo " -d <destination> Specify installation directory, default is /usr/local/bin; will overwrite if already installed"
55
+ echo " -v <version> Specify chsrc version"
56
+ echo " -l <language> Specify script language, supports zh and en"
57
+ echo
58
+ fi
39
59
}
40
60
41
-
61
+ # 确定下载路径
42
62
set_install_path () {
43
63
if [ -n " $install_dir " ]; then
44
64
# 扩展 ~ 符号
45
65
install_dir=" ${install_dir/# \~ / $HOME } "
66
+
67
+ # 检查路径是否存在,如果不存在则创建该路径
68
+ if [ ! -d " $install_dir " ]; then
69
+ # 多种语言输出
70
+ if [ " $lan " = " zh" ]; then
71
+ echo " 目录 $install_dir 不存在,正在创建..."
72
+ else
73
+ echo " Directory $install_dir does not exist. Creating..."
74
+ fi
75
+ # 多语言输出
76
+ if ! mkdir -p " $install_dir " ; then
77
+ if [ " $lan " = " zh" ]; then
78
+ echo " 创建目录失败,请重试"
79
+ else
80
+ echo " Failed to create directory, please try again"
81
+ fi
82
+ exit 1
83
+ fi
84
+
85
+ temp_install_dir=" $install_dir " # 记录临时安装目录
86
+ fi
87
+
46
88
elif existing_path=$( command -v " $binary_name " 2> /dev/null) ; then
47
- info " $binary_name 已安装,更新路径: ${existing_path} "
89
+
90
+ if [ " $lan " = " zh" ]; then
91
+ info " $binary_name 已安装,更新路径: ${existing_path} "
92
+ else
93
+ info " $binary_name is already installed, updating path: ${existing_path} "
94
+ fi
95
+
48
96
install_dir=$( dirname " $existing_path " )
49
97
else
50
98
# 检查默认路径
51
99
if [ -d " $default_install_path " ] && [ -w " $default_install_path " ]; then
52
100
install_dir=" $default_install_path "
101
+ else if [ -d " $noroot_default_install_path " ] && [ -w " $noroot_default_install_path " ]; then
102
+ install_dir=" $noroot_default_install_path "
53
103
else
54
- error " 默认下载路径 /usr/local/bin 不可写,请使用 sudo 命令运行脚本;或通过 -d 参数指定其它路径安装"
104
+ if [ " $lan " = " zh" ]; then
105
+ error " 默认下载路径 /usr/local/bin 不可写,请使用 sudo 命令运行脚本;或通过 -d 参数指定其它路径安装"
106
+ else
107
+ error " Default download path /usr/local/bin is not writable. Please run the script with sudo; or specify another path using the -d option."
108
+ fi
109
+
55
110
fi
56
111
fi
57
112
}
58
113
59
-
114
+ # 从Gitee仓库安装 指定架构,操作系统,版本 的chsrc二进制文件
60
115
install () {
61
116
arch=" $( uname -m | tr ' [:upper:]' ' [:lower:]' ) "
62
117
63
118
case " $arch " in
64
119
x86_64) arch=" x64" ;;
65
- aarch64) arch=" aarch64" ;;
120
+ aarch64|arm64 ) arch=" aarch64" ;;
66
121
riscv64) arch=" riscv64" ;;
67
122
armv7* ) arch=" armv7" ;;
68
- * ) error " 不支持的架构: ${arch} " ;;
123
+ * )
124
+ if [ " $lan " = " zh" ]; then
125
+ error " 不支持的架构: ${arch} "
126
+ else
127
+ error " Unsupported architecture: ${arch} "
128
+ fi
129
+ ;;
69
130
esac
70
131
71
132
platform=" $( uname -s | awk ' {print tolower($0)}' ) "
72
133
73
134
case " $platform " in
74
135
linux) platform=" linux" ;;
75
136
darwin) platform=" macos" ;;
76
- * ) error " 不支持的平台: ${platform} " ;;
137
+ * )
138
+ if [ " $lan " = " zh" ]; then
139
+ error " 不支持的平台: ${platform} "
140
+ else
141
+ error " Unsupported platform: ${platform} "
142
+ fi
143
+ ;;
77
144
esac
78
145
79
- if [ -n " $version " ]; then
80
- url=" https://gitee.com/RubyMetric/chsrc/releases/download/v${version} /${binary_name} -${arch} -${platform} "
81
- else
82
- url=" https://gitee.com/RubyMetric/chsrc/releases/download/pre/${binary_name} -${arch} -${platform} "
83
- version=" latest"
146
+ if [[ ! " $version " =~ ^(pre| 0\. 1\. ([4-9]))$ ]]; then
147
+ # version 不符合条件,报错
148
+ if [ " $lan " = " zh" ]; then
149
+ error " 不支持的版本: ${version} ,版本号必须在 0.1.4 到 0.1.9 之间或为 'pre'"
150
+ else
151
+ error " Unsupported version: ${version} . Version number must be between 0.1.4 and 0.1.9 or 'pre'"
152
+ fi
84
153
fi
85
154
86
- path_to_executable= " ${install_dir } /${binary_name} "
155
+ url= " https://gitee.com/RubyMetric/chsrc/releases/download/ ${version } /${binary_name} - ${arch} - ${platform }"
87
156
88
- info " 下载 ${binary_name} (${arch} 架构, ${platform} 平台) 到 ${path_to_executable} "
157
+ path_to_executable=" ${install_dir} /${binary_name} "
158
+
159
+ if [ " $lan " = " zh" ]; then
160
+ info " 下载 ${binary_name} (${arch} 架构, ${platform} 平台, ${version} 版本) 到 ${path_to_executable} "
161
+ else
162
+ info " Downloading ${binary_name} (${arch} architecture, ${platform} platform, version ${version} ) to ${path_to_executable} "
163
+ fi
89
164
90
- # 下载文件并设置权限
91
165
if curl -sL " $url " -o " $path_to_executable " ; then
92
166
chmod +x " $path_to_executable "
93
- info " 🎉 安装完成,版本: $version ,路径: $path_to_executable "
167
+
168
+ if [ " $lan " = " zh" ]; then
169
+ info " 🎉 安装完成,版本: $version ,路径: $path_to_executable "
170
+ else
171
+ info " 🎉 Installation completed, path: $path_to_executable "
172
+ fi
173
+
94
174
else
95
- error " 下载失败,请检查您的网络连接和代理设置: ${url} "
175
+ if [ " $lan " = " zh" ]; then
176
+ error " 下载失败,请检查您的网络连接和代理设置: ${url} "
177
+ else
178
+ error " Download failed, please check your network connection and proxy settings: ${url} "
179
+ fi
180
+
181
+ fi
182
+ }
183
+
184
+ # 清理函数
185
+ cleanup () {
186
+ if [ -n " $temp_install_dir " ] && [ -d " $temp_install_dir " ]; then
187
+
188
+ if [ " $lan " = " zh" ]; then
189
+ echo " 清理创建的目录: $temp_install_dir "
190
+ else
191
+ echo " Cleaning up created directory: $temp_install_dir "
192
+ fi
193
+ rm -rf " $temp_install_dir "
96
194
fi
97
195
}
98
196
197
+ # 设置 trap 以捕获退出信号
198
+ trap cleanup EXIT
99
199
100
- # main
101
- while getopts " :hd:v:" option; do
200
+ # 从命令行读取 安装路径与版本号
201
+ while getopts " :hd:v:l: " option; do
102
202
case $option in
103
203
h)
104
- help
105
- exit 0
204
+ helpflag=1
106
205
;;
107
206
d)
108
207
install_dir=${OPTARG}
109
208
;;
110
209
v)
111
210
version=${OPTARG}
112
211
;;
212
+ l)
213
+ lan=${OPTARG}
214
+ ;;
113
215
\? )
114
216
echo " 无效的命令行选项,请使用 -h 查看帮助"
115
217
exit 1
116
218
;;
117
219
esac
118
220
done
119
221
222
+ # 判断语言的类型,不符合直接退出
223
+ if [[ " $lan " != " zh" && " $lan " != " en" ]]; then
224
+ error " 无效的语言选项: $lan 。支持的选项是 zh 和 en"
225
+ fi
226
+
227
+ if [ " $helpflag " -eq 1 ]; then
228
+ help
229
+ exit 0;
230
+ fi
231
+
120
232
set_install_path
121
- install
233
+ install
0 commit comments