# 跨磁盘允许读写用这个加白 local bind_maps_force=( ) # 跨磁盘允许读写用这个加白, 但只允许从脚本运行时加白 local bind_maps=( "/run/media/$USER/Data/哈哈哈/uncompress::gamesuncompress_bwrap" "/run/media/$USER/Data_Samsung/Env/哈哈哈/uncompress::gamesuncompress_870_bwrap" "/run/media/$USER/Software_Master/games::gamesuncompress_980_bwrap" ) local bind_maps_created=() if [[ ! -v bwrap_run_from_script ]]; then bind_maps=() echo "警告: 从source的函数运行, 跳过挂载bind_maps" fi # 文件夹映射 local bind_maps_absloute=( "$HOME/Documents/bwrap_home::$HOME" )
# 环境变量 local env_vars=( "LANG=zh_CN.UTF-8" "LC_ALL=zh_CN.UTF-8" # NVIDIA(有则生效) "__GL_THREADED_OPTIMIZATIONS=1" )
# ============= 实验室GPU服务器适配 ============= local HOST_WHITELIST=( "ubuntu" "y" "5024080" ) local cur_host="$(hostname -s 2>/dev/null || hostname)" for h in "${HOST_WHITELIST[@]}"; do if [[ "$cur_host" == "$h" ]]; then ro_dirs+=( "$HOME/.oh-my-bash" "$HOME/.bashrc" "$HOME/.profile" ) env_vars+=( "FROM_BWRAP=1" ) allowed_dirs+=( # 服务器上的 "$HOME/bwrap_files/transfer" "$HOME/tmp" ) # 删除个人电脑上的/home绑定设置,改成服务器专用的 for i in "${!bind_maps_absloute[@]}"; do if [[ "${bind_maps_absloute[i]}" == *"$HOME/Documents/bwrap_home"* ]]; then unset 'bind_maps_absloute[i]' bind_maps_absloute=("${bind_maps_absloute[@]}") # 可选:重建索引 break # 只删第一个;要删全部就去掉 break fi done bind_maps_absloute+=("$HOME/bwrap_files/home::$HOME")
echo "===== Binding Checking =====" echo "ro_dirs:" for d in "${ro_dirs[@]}"; do echo " - $d"; done echo "allowed_dirs:" for d in "${allowed_dirs[@]}"; do echo " - $d"; done echo "bind_maps:" for m in "${bind_maps[@]}"; do echo " - $m"; done echo "bind_maps_force:" for m in "${bind_maps_force[@]}"; do echo " - $m"; done echo "bind_maps_absloute:" for m in "${bind_maps_absloute[@]}"; do echo " - $m"; done echo "===== Actual Binding =====" # =================== 根目录绑定 ===================
echo "actual bind_maps_absloute:" for m in "${bind_maps_absloute[@]}"; do host="${m%%::*}" target="${m##*::}" [ ! -d "$host" ] && echo "$host" && continue [ -e "$host" ] && bargs+=( --bind "$host" "$target" ) echo " - ${host} -> ${target}" done if [[ "$WORK_DIR" == "$HOME" ]]; then echo "警告: WORK_DIR 目录与用户主目录相同! 本次未授权访问主目录" else bargs+=( --bind "$WORK_DIR" "$WORK_DIR" ) fi
# =================== ro_dirs =================== for d in "${ro_dirs[@]}"; do [ -e "$d" ] && bargs+=( --ro-bind "$d" "$d" ) done
# =================== allowed_dirs =================== for d in "${allowed_dirs[@]}"; do [ -e "$d" ] && bargs+=( --bind "$d" "$d" ) done
# =================== 注入环境变量 =================== for kv in "${env_vars[@]}"; do key="${kv%%=*}" val="${kv#*=}" bargs+=( --setenv "$key" "$val" ) done
echo "==========" echo -e "\n执行清理操作..." if [[ -v bwrap_run_from_script ]]; then echo "变量 bwrap_run_from_script 已设置" unset bwrap_run_from_script fi # bind_maps_created+=("/tmp/114514") for index in "${!bind_maps_created[@]}"; do # echo"元素 $index: ${bind_maps_created[$index]}" rm -rv "${bind_maps_created[$index]}" done echo "清理完成。"
) }
if [[ ${BASH_SOURCE[0]} == $0 ]]; then bwrap_run_from_script=1 bwrap_run $@ fi
# 跨磁盘允许读写用这个加白 local bind_maps_force=( ) # 跨磁盘允许读写用这个加白, 但只允许从脚本运行时加白 local bind_maps=( "/run/media/$USER/Disk/games::games_here" ) local bind_maps_created=() if [[ ! -v bwrap_run_from_script ]]; then bind_maps=() echo "警告: 从source的函数运行, 跳过挂载bind_maps" fi # 文件夹映射 local bind_maps_absloute=( "$HOME/Documents/bwrap_home::$HOME" )
# 环境变量 local env_vars=( "LANG=zh_CN.UTF-8" "LC_ALL=zh_CN.UTF-8" # NVIDIA(有则生效) "__GL_THREADED_OPTIMIZATIONS=1" )
# ============= 实验室GPU服务器适配 ============= local HOST_WHITELIST=( "gpusrv" "y" ) local cur_host="$(hostname -s 2>/dev/null || hostname)" for h in "${HOST_WHITELIST[@]}"; do if [[ "$cur_host" == "$h" ]]; then ro_dirs+=( "$HOME/.oh-my-bash" "$HOME/.bashrc" "$HOME/.profile" ) env_vars+=( "FROM_BWRAP=1" ) allowed_dirs+=( # 服务器上的 "$HOME/bwrap_files/transfer" "$HOME/tmp" ) # 删除个人电脑上的/home绑定设置,改成服务器专用的 for i in "${!bind_maps_absloute[@]}"; do if [[ "${bind_maps_absloute[i]}" == *"$HOME/Documents/bwrap_home"* ]]; then unset 'bind_maps_absloute[i]' bind_maps_absloute=("${bind_maps_absloute[@]}") # 可选:重建索引 break # 只删第一个;要删全部就去掉 break fi done bind_maps_absloute+=("$HOME/bwrap_files/home::$HOME")
echo "===== Binding Checking =====" echo "ro_dirs:" for d in "${ro_dirs[@]}"; do echo " - $d"; done echo "allowed_dirs:" for d in "${allowed_dirs[@]}"; do echo " - $d"; done echo "bind_maps:" for m in "${bind_maps[@]}"; do echo " - $m"; done echo "bind_maps_force:" for m in "${bind_maps_force[@]}"; do echo " - $m"; done echo "bind_maps_absloute:" for m in "${bind_maps_absloute[@]}"; do echo " - $m"; done echo "===== Actual Binding =====" # =================== 根目录绑定 ===================
echo "actual bind_maps_absloute:" for m in "${bind_maps_absloute[@]}"; do host="${m%%::*}" target="${m##*::}" [ ! -d "$host" ] && echo "$host" && continue [ -e "$host" ] && bargs+=( --bind "$host" "$target" ) echo " - ${host} -> ${target}" done if [[ "$WORK_DIR" == "$HOME" ]]; then echo "警告: WORK_DIR 目录与用户主目录相同! 本次未授权访问主目录" else bargs+=( --bind "$WORK_DIR" "$WORK_DIR" ) fi
# =================== ro_dirs =================== for d in "${ro_dirs[@]}"; do [ -e "$d" ] && bargs+=( --ro-bind "$d" "$d" ) done
# =================== allowed_dirs =================== for d in "${allowed_dirs[@]}"; do [ -e "$d" ] && bargs+=( --bind "$d" "$d" ) done
# =================== 注入环境变量 =================== for kv in "${env_vars[@]}"; do key="${kv%%=*}" val="${kv#*=}" bargs+=( --setenv "$key" "$val" ) done
echo "==========" echo -e "\n执行清理操作..." if [[ -v bwrap_run_from_script ]]; then echo "变量 bwrap_run_from_script 已设置" unset bwrap_run_from_script fi # bind_maps_created+=("/tmp/114514") for index in "${!bind_maps_created[@]}"; do # echo"元素 $index: ${bind_maps_created[$index]}" rm -rv "${bind_maps_created[$index]}" done echo "清理完成。"
) }
if [[ ${BASH_SOURCE[0]} == $0 ]]; then bwrap_run_from_script=1 bwrap_run $@ fi