-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtemplate.sh
249 lines (218 loc) · 6.46 KB
/
template.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
#!/bin/bash
gen_info(){
readLine lineinfo "请输入介绍:"
if [ -z "$(echo -e "$lineinfo" | tr -d '[:space:]')" ]; then
WARN "介绍为空,默认填入---- no info ----"
lineinfo="---- no info ----"
fi
cat << EOF >$TEMP/$1.sh
#!/bin/bash
# VERSION: 1
${1}_info(){
echo "$lineinfo"
}
EOF
}
gen_deps(){
if readReturn "是否有依赖的项/命令?"; then
readLine deps "请输入依赖-允许输入不存在于注册文件的命令(自动检测),或者为空"
if [ -z "$(echo -e "$deps" | tr -d '[:space:]')" ]; then
WARN "依赖项为空,默认返回空"
deps=""
fi
cat << EOF >>$TEMP/$1.sh
${1}_deps(){
echo "__predeps__ $deps"
}
EOF
else
cat << EOF >>$TEMP/$1.sh
${1}_deps(){
echo "__predeps__"
}
EOF
fi
}
gen_check(){
if readReturn "是否能用type命令检测"; then
cat << EOF >>$TEMP/$1.sh
${1}_check(){
checkCmd "$1"
return \$?
}
EOF
else
NOTE "如果是纯配置文件,使用checkCfg "\$HOME/proxyrc";return \$?;即可"
NOTE "如果能在终端输入明确指令,检测函数checkCmd "$1"; return \$?;可供使用"
NOTE "不要用~/.proxyrc,必须要用\$HOME环境变量"
# NOTE "如果是纯配置文件(无需检查是否安装),可以保持空白ctrl-d直接跳过"
readMultiLine checkWay "请输入检测是否安装的bash命令,默认以return 0代表已安装"
if [ -z "$(echo -e "$checkWay" | tr -d '[:space:]')" ]; then
WARN "检测命令为空,默认任何情况下均视为已安装"
checkWay="return 0"
fi
cat << EOF >>$TEMP/$1.sh
${1}_check(){
$checkWay
return 1
}
EOF
fi
}
gen_install(){
NOTE "此处可以填入从源码构建的指令,也可以填入包管理安装命令(最好加上-y)"
NOTE "若无安装操作 也可以保持空白ctrl-d直接跳过"
readMultiLine installCmd "请输入安装命令"
if [ -z "$(echo -e "$installCmd" | tr -d '[:space:]')" ]; then
WARN "安装命令为空,跳过"
cat << EOFF >>$TEMP/$1.sh
${1}_install(){
genSignS "$1" \$INSTALL
cat << 'EOF' >> \$INSTALL
MODULE_INFO "......正在安装${1}......"
INFO "${1}是无需安装的配置文件"
EOF
genSignE "$1" \$INSTALL
}
EOFF
else
cat << EOFF >>$TEMP/$1.sh
${1}_install(){
genSignS "$1" \$INSTALL
cat << 'EOF' >> \$INSTALL
MODULE_INFO "......正在安装${1}......"
if ${1}_check; then
WARN "${1}已经安装,不再执行安装操作"
else
$installCmd
fi
EOF
genSignE "$1" \$INSTALL
}
EOFF
fi
}
gen_config(){
if readReturn "是否有配置文件"; then
NOTE "此处输入为~/.zshrc 或者 ./zshrc 或 bin/wclip.sh 或 ~/bin/wclip.sh"
readArray configFiles "请输入配置文件路径(多个文件用空格分隔,且必须采用相对路径,默认工作目录为~):"
if [[ ${#configFiles[@]} -eq 0 ]]; then
WARN "配置文件项全为空,跳过"
else
cat << EOF >>$TEMP/$1.sh
${1}_config(){
# 加入配置文件更新映射
EOF
declare -A config_map=()
resolve_configFiles configFiles config_map
{
saveMap config_map
echo "add_configMap config_map"
} >> $TEMP/$1.sh
for key in ${!config_map[@]}; do
for file in ${config_map[$key]}; do
readMultiLine configCmd "请输入${key}/${file}配置命令:"
if [ -z "$(echo -e "$configCmd" | tr -d '[:space:]')" ]; then
WARN "该文件配置为空,默认写入一个换行符"
cat << EOFF >> $TEMP/$1.sh
# 配置文件 $key/$file 为空--默认写入一个换行符
cat << 'EOF' >> \$TEMP/$key/$file
EOF
EOFF
else
echo "" >> $TEMP/$1.sh
echo "# 配置文件 $key/$file " >> $TEMP/$1.sh
readBool ifSign "是否需要用 >>>> $1 >>>> 标记"
if [[ $ifSign == y ]]; then
echo "genSignS $1 \$TEMP/$key/$file" >> $TEMP/$1.sh
fi
cat << EOFF >> $TEMP/$1.sh
cat << 'EOF' >> \$TEMP/$key/$file
$configCmd
EOF
EOFF
if [[ $ifSign == y ]]; then
echo "genSignE $1 \$TEMP/$key/$file" >> $TEMP/$1.sh
fi
fi
done
done
cat << EOFF >> $TEMP/$1.sh
return 0
}
EOFF
fi
fi
}
gen_update(){
NOTE "当尚不明确升级指令(或默认使用包管理升级) 可以保持空白ctrl-d直接跳过"
readMultiLine updateCmd "请输入升级命令"
if [ -z "$(echo -e "$updateCmd" | tr -d '[:space:]')" ]; then
WARN "升级命令为空,跳过"
else
cat << EOFF >>$TEMP/$1.sh
${1}_update(){
genSignS "$1" \$UPDATE
cat << 'EOF' >> \$UPDATE
MODULE_INFO "......正在升级${1}......"
$updateCmd
EOF
genSignE "$1" \$UPDATE
}
EOFF
fi
}
gen_uninstall(){
NOTE "当尚不明确卸载指令(或默认使用包管理卸载) 可以保持空白ctrl-d直接跳过"
readMultiLine uninstallCmd "请输入卸载命令"
if [ -z "$(echo -e "$uninstallCmd" | tr -d '[:space:]')" ]; then
WARN "卸载命令为空,跳过"
else
cat << EOFF >>$TEMP/$1.sh
${1}_uninstall(){
genSignS "$1" \$UNINSTALL
cat << 'EOF' >> \$UNINSTALL
MODULE_INFO "......正在卸载${1}......"
if ${1}_check; then
$uninstallCmd
else
WARN "${1}已经卸载,不再执行卸载操作"
fi
EOF
genSignE "$1" \$UNINSTALL
}
EOFF
fi
}
check_complete(){
local fileName=$TEMP/$1.sh
bash -n "$fileName" && SUCCESS "==> ${1}注册文件检查 : [OK]" || ERROR "==> ${1}注册文件检查 : [ERROR]"
}
gen_regFile(){
MODULE_INFO '#.生成注册文件'
local fileName
local ifOverwrite=y
if [[ $# -eq 1 ]]; then
fileName=$1
else
readNoSpace fileName "请输入注册名称/命令: "
if [[ -f $TEMP/$fileName.sh ]]; then
INFO "检测到已存在的临时注册文件"
readBool ifOverwrite "是否覆盖?"
fi
fi
if [[ $ifOverwrite == y ]]; then
INFO "==> 当前注册文件: $fileName"
gen_info $fileName
gen_deps $fileName
gen_check $fileName
gen_install $fileName
gen_config $fileName
gen_update $fileName
gen_uninstall $fileName
fi
# 检查语法
INFO "临时注册文件生成完毕,文件路径: $TEMP/$fileName.sh"
check_complete $fileName
safeOverwrite $fileName.sh $TEMP $REGP
}