安装期间 /etc 下有冲突文件时并不能正确打印 MESSAGE #1

Open
opened 2024-11-20 14:45:16 -05:00 by wyj · 0 comments
Owner
leaf_merge_package() {
  pushd $1 > /dev/null 2>&1
  local _trace_dir="${TRACE_DIR}/${PKG_PREFIX}/${PKG_NAME}"
  local _item _item_conflict _mode _owner _group
  local _time="$(date +%Y%m%d%H%M%S)"
  cat "${_trace_dir}"/DIRS | while read -r _item; do
    _mode=$(stat -c %a ."${_item}")
    _owner=$(stat -c %u ."${_item}")
    _group=$(stat -c %g ."${_item}")
    install -d -m ${_mode} -o ${_owner} -g ${_group} "${_item}"
  done
  cat "${_trace_dir}"/FILES | while read -r _item; do
    _mode=$(stat -c %a ."${_item}")
    _owner=$(stat -c %u ."${_item}")
    _group=$(stat -c %g ."${_item}")
    if [[ "${_item}" == /etc/* && -e "${_item}" ]]; then
      _item_conflict="$(dirname "${_item}")/._$(basename "${_item}").conflict_${PKG_NAME}_${_time}"
      install -D -m ${_mode} -o ${_owner} -g ${_group} ."${_item}" "${_item_conflict}"
      echo "Debug: install ${_item} as ${_item_conflict}$"
      leaf_record_message "Config file confliction on ${_item}, the package provided version is installed as ${_item_conflict}."
    else
      install -D -m ${_mode} -o ${_owner} -g ${_group} ."${_item}" "${_item}"
    fi
  done
  cat "${_trace_dir}"/LINKS | while read -r _item; do
    cp -dp ."${_item}" "${_item}"
  done
  leaf_invoke_hooks
  echo "The MESSAGE after merge is ${MESSAGE}"
  popd > /dev/null 2>&1
}

当前的写法中 leaf_record_message 在管道造成的子 shell 中运行,从而并不能记录 MESSAGE 变量

```bash leaf_merge_package() { pushd $1 > /dev/null 2>&1 local _trace_dir="${TRACE_DIR}/${PKG_PREFIX}/${PKG_NAME}" local _item _item_conflict _mode _owner _group local _time="$(date +%Y%m%d%H%M%S)" cat "${_trace_dir}"/DIRS | while read -r _item; do _mode=$(stat -c %a ."${_item}") _owner=$(stat -c %u ."${_item}") _group=$(stat -c %g ."${_item}") install -d -m ${_mode} -o ${_owner} -g ${_group} "${_item}" done cat "${_trace_dir}"/FILES | while read -r _item; do _mode=$(stat -c %a ."${_item}") _owner=$(stat -c %u ."${_item}") _group=$(stat -c %g ."${_item}") if [[ "${_item}" == /etc/* && -e "${_item}" ]]; then _item_conflict="$(dirname "${_item}")/._$(basename "${_item}").conflict_${PKG_NAME}_${_time}" install -D -m ${_mode} -o ${_owner} -g ${_group} ."${_item}" "${_item_conflict}" echo "Debug: install ${_item} as ${_item_conflict}$" leaf_record_message "Config file confliction on ${_item}, the package provided version is installed as ${_item_conflict}." else install -D -m ${_mode} -o ${_owner} -g ${_group} ."${_item}" "${_item}" fi done cat "${_trace_dir}"/LINKS | while read -r _item; do cp -dp ."${_item}" "${_item}" done leaf_invoke_hooks echo "The MESSAGE after merge is ${MESSAGE}" popd > /dev/null 2>&1 } ``` 当前的写法中 `leaf_record_message` 在管道造成的子 shell 中运行,从而并不能记录 `MESSAGE` 变量
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wyj/leaf#1
No description provided.