You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Tcl 9.0解压并提取.tar.gz归档文件?

问题:Tcl tar包解压gzip压缩tar文件失败

背景

我有一段可正常运行的Shell命令:

tar -x --directory "$inner" --strip-components 1 <"$inner.tar.gz"

这是我正在迁移为Tcl代码的Shell脚本的一部分。我可以用exec命令保留原有逻辑,但想尝试用Tcl的通道功能实现。

尝试的示例与问题

我找到一个Tcl tar包的示例:

#! /bin/env tclsh
package require tar
set chan [open myfile.tar.gz]
zlib push gunzip $chan
set data [::tar::get $chan some_file_in_tarball -chan]
close $chan

但花费数小时仍无法成功运行,遇到以下问题:

问题1:gzip解压通道不可寻道

使用Tcl 9.0.3和tar包0.13时,执行以下命令报错:

% info patchlevel
9.0.3
% package require tar
0.13
% set chan [open package.tar.gz rb]
file5
% zlib push gunzip $chan
file5
% ::tar::contents $chan -chan
error during seek on "file5": invalid argument

我理解tar包需要可寻道文件,但zlib push gunzip $chan会让通道变为不可寻道。

问题2:直接操作tar文件报错

简化问题,直接操作未压缩的tar文件,仍报错:

% ::tar::contents package.tar
expected integer but got "0ush:

"

已通过Shell命令tar -t <package.tar确认该tar包有效。

补充信息

  • 使用macOS自带的旧版tclsh(版本8.5.9,tar包版本0.6)可成功运行tar包命令:
    % info patchlevel
    

8.5.9
% package require tar
0.6
% llength [::tar::contents package.tar]
207

推测Homebrew安装的tcl-tk附带的`tar`包与Tcl 9.0不兼容。
- 后续找到相关bug报告,问题源于八进制转换错误,补丁已包含在tar包0.14版本中,而Homebrew安装的是0.13版本,我将尝试安装新版本。

内容的提问来源于stack exchange,提问作者davidchambers
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 21:42:13