[optimized] 代码优化:清理死代码、修复竞态条件与空参数安全问题
- 删除 backup() 中的调试 echo 残留 - 删除被注释的死代码行 - 修复 backup_wifi rm -rf 空参数安全问题 - 重写 start.sh 逻辑,优化配置生成流程 - 重构 kill_Serve 使用 mkdir 原子锁替代 PID 文件
This commit is contained in:
19
start.sh
19
start.sh
@@ -1,9 +1,16 @@
|
|||||||
#!/system/bin/sh
|
#!/system/bin/sh
|
||||||
if [ -f "${0%/*}/tools/tools.sh" ]; then
|
if [ ! -f "${0%/*}/tools/tools.sh" ]; then
|
||||||
MODDIR="${0%/*}"
|
echo "${0%/*}/tools/tools.sh遺失"
|
||||||
conf_path="${0%/*}/backup_settings.conf"
|
exit 1
|
||||||
[ ! -f "${0%/*}/backup_settings.conf" ] && . "${0%/*}/tools/tools.sh"
|
|
||||||
else
|
|
||||||
echo "${0%/*}/tools/tools.sh遺失"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
MODDIR="${0%/*}"
|
||||||
|
conf_path="${0%/*}/backup_settings.conf"
|
||||||
|
|
||||||
|
# 若配置文件不存在,啟動腳本自動生成默認配置後退出
|
||||||
|
if [ ! -f "$conf_path" ]; then
|
||||||
|
. "${0%/*}/tools/tools.sh"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
. "${0%/*}/tools/tools.sh" | tee "${0%/*}/log_$(date +%Y-%m-%d_%H-%M).txt"
|
. "${0%/*}/tools/tools.sh" | tee "${0%/*}/log_$(date +%Y-%m-%d_%H-%M).txt"
|
||||||
|
|||||||
@@ -436,20 +436,30 @@ echo_log() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
kill_Serve() {
|
kill_Serve() {
|
||||||
LOCK_FILE="/tmp/my_backup.lock"
|
local LOCK_DIR="/data/local/tmp/.backup_lock"
|
||||||
if [[ -f $LOCK_FILE ]]; then
|
local MY_PID="$$"
|
||||||
OLD_PID="$(cat "$LOCK_FILE")"
|
|
||||||
if kill -0 "$OLD_PID" 2>/dev/null; then
|
# 使用 mkdir 作為原子鎖操作,避免 TOCTOU 競態條件
|
||||||
echo "發現先前的備份程序 (PID=$OLD_PID),將其終止"
|
if ! mkdir "$LOCK_DIR" 2>/dev/null; then
|
||||||
kill -KILL "$OLD_PID"
|
if [[ -f $LOCK_DIR/pid ]]; then
|
||||||
echo "結束自身,避免重複執行"
|
OLD_PID="$(cat "$LOCK_DIR/pid")"
|
||||||
exit 1
|
if kill -0 "$OLD_PID" 2>/dev/null; then
|
||||||
|
echo "發現先前的備份程序 (PID=$OLD_PID),將其終止"
|
||||||
|
kill -KILL "$OLD_PID"
|
||||||
|
echo "結束自身,避免重複執行"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "發現 lock 但程序已不存在,視為殘留 lock"
|
||||||
|
rm -rf "$LOCK_DIR"
|
||||||
|
mkdir "$LOCK_DIR" 2>/dev/null || exit 1
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo "發現 lock 檔但程序已不存在,視為殘留 lock"
|
rm -rf "$LOCK_DIR"
|
||||||
|
mkdir "$LOCK_DIR" 2>/dev/null || exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo $$ > "$LOCK_FILE"
|
echo "$MY_PID" > "$LOCK_DIR/pid"
|
||||||
trap "rm -f '$LOCK_FILE'" EXIT
|
trap "rm -rf '$LOCK_DIR'" EXIT
|
||||||
}
|
}
|
||||||
echo $$
|
echo $$
|
||||||
kill_Serve
|
kill_Serve
|
||||||
@@ -642,11 +652,13 @@ alias Set_Ops="app_process /system/bin com.xayah.dex.HiddenApiUtil setOpsMode $U
|
|||||||
alias setDisplay="app_process /system/bin com.xayah.dex.HiddenApiUtil setDisplayPowerMode $@"
|
alias setDisplay="app_process /system/bin com.xayah.dex.HiddenApiUtil setDisplayPowerMode $@"
|
||||||
find_tools_path="$(find "$path_hierarchy"/* -maxdepth 1 -name "tools" -type d ! -path "$path_hierarchy/tools")"
|
find_tools_path="$(find "$path_hierarchy"/* -maxdepth 1 -name "tools" -type d ! -path "$path_hierarchy/tools")"
|
||||||
backup_wifi() {
|
backup_wifi() {
|
||||||
[[ ! -d $1 ]] && mkdir -p "$1"
|
local wifi_dir="$1"
|
||||||
if [[ -d $1 ]]; then
|
[[ -z $wifi_dir ]] && echoRgb "backup_wifi: 目錄參數為空" "0" && return 1
|
||||||
|
[[ ! -d $wifi_dir ]] && mkdir -p "$wifi_dir"
|
||||||
|
if [[ -d $wifi_dir ]]; then
|
||||||
echoRgb "備份wifi密碼"
|
echoRgb "備份wifi密碼"
|
||||||
rm -rf "$1"/*
|
rm -rf "${wifi_dir:?}"/*
|
||||||
app_process /system/bin com.xayah.dex.NetworkUtil saveNetworks>"$1/wifi.json"
|
app_process /system/bin com.xayah.dex.NetworkUtil saveNetworks>"$wifi_dir/wifi.json"
|
||||||
echo_log "wifi備份"
|
echo_log "wifi備份"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -1897,7 +1909,6 @@ backup() {
|
|||||||
txt_path="$txt"
|
txt_path="$txt"
|
||||||
[[ ! -f $txt ]] && echoRgb "請執行start.sh獲取應用列表再來備份" "0" && exit 1
|
[[ ! -f $txt ]] && echoRgb "請執行start.sh獲取應用列表再來備份" "0" && exit 1
|
||||||
TXT_NAME="${txt##*/}"
|
TXT_NAME="${txt##*/}"
|
||||||
echo "${TXT_NAME##*.}"
|
|
||||||
case ${TXT_NAME##*.} in
|
case ${TXT_NAME##*.} in
|
||||||
txt) ;;
|
txt) ;;
|
||||||
*) echoRgb "$txt不是腳本讀取格式" "0" && exit 2 ;;
|
*) echoRgb "$txt不是腳本讀取格式" "0" && exit 2 ;;
|
||||||
@@ -1968,7 +1979,6 @@ backup() {
|
|||||||
fi
|
fi
|
||||||
[[ $backup_media = false ]] && echoRgb "當前$MODDIR_NAME/backup_settings.conf的\n -backup_media=0將不備份自定義資料夾" "0"
|
[[ $backup_media = false ]] && echoRgb "當前$MODDIR_NAME/backup_settings.conf的\n -backup_media=0將不備份自定義資料夾" "0"
|
||||||
txt2="$Backup/appList.txt"
|
txt2="$Backup/appList.txt"
|
||||||
#txt2="${txt2/'/storage/emulated/'/'/data/media/'}"
|
|
||||||
txt_path2="$txt2"
|
txt_path2="$txt2"
|
||||||
[[ ! -f $txt2 ]] && echo "#不需要恢復還原的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market">"$txt2"
|
[[ ! -f $txt2 ]] && echo "#不需要恢復還原的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market">"$txt2"
|
||||||
txt2="$(cat "$txt2")"
|
txt2="$(cat "$txt2")"
|
||||||
|
|||||||
Reference in New Issue
Block a user