fix: 修正 tar 命令重定向逻辑
问题:
- 之前使用 if...then 包裹 tar 命令时的重定向 2>&1 >&2
会影响整个 if 语句块,包括后续的 echo 输出
- 导致 echo "${folders_tar}" 的输出也被重定向到 stderr
- 使得 $(backup_folders) 无法捕获返回的文件路径
修复:
- 将 tar 命令独立执行,使用 >&2 2>&1 重定向所有输出到 stderr
- 将 if 条件改为检查文件是否存在 [[ -f "${folders_tar}" ]]
- 这样 echo 输出不受重定向影响,可以正常返回路径
重定向说明:
- `>&2` 先将 stdout 重定向到 stderr
- `2>&1` 再将 stderr 重定向到 stdout(此时已经是 stderr)
- 最终效果:tar 的所有输出都到 stderr,不干扰函数返回值
This commit is contained in:
@@ -209,8 +209,10 @@ backup_folders() {
|
||||
# 执行打包
|
||||
log_info "开始打包文件夹..."
|
||||
log_info "排除规则: ${exclude_args}"
|
||||
# 将 tar 输出重定向到 stderr,避免干扰函数返回值
|
||||
if eval "tar -czf '${folders_tar}' ${exclude_args} ${tar_sources}" 2>&1 >&2; then
|
||||
# 将 tar 的 stdout 和 stderr 都重定向到 stderr,避免干扰函数返回值
|
||||
eval "tar -czf '${folders_tar}' ${exclude_args} ${tar_sources}" >&2 2>&1
|
||||
|
||||
if [[ -f "${folders_tar}" ]]; then
|
||||
local tar_size=$(du -h "${folders_tar}" | cut -f1)
|
||||
log_info "文件夹备份完成: ${folders_tar} (大小: ${tar_size})"
|
||||
echo "${folders_tar}"
|
||||
|
||||
Reference in New Issue
Block a user