Linux下Fish Shell通用解压函数构建失败问题求助
Fish Shell 通用解压函数修复:tar.gz 文件无法解压的问题
你编写的ex函数在处理tar.gz文件时无反应,核心问题是switch语句错误使用了file命令的输出进行匹配。file命令返回的是文件的类型描述(比如test.tar.gz: gzip compressed data, was "test.tar", last modified: ...),而非文件名后缀,导致你定义的'*.tar.gz'这类通配符完全匹配不到任何分支,自然不会执行解压操作。
修复后的函数改为直接匹配文件名后缀,同时优化tar命令的参数(现代tar可以自动识别压缩格式,用xf即可,无需区分xjf/xvf):
function ex if test -f $argv[1] switch $argv[1] case '*.tar.bz2' '*.tbz2' tar xf $argv[1] case '*.tar.gz' '*.tgz' tar xf $argv[1] case '*.bz2' bunzip2 $argv[1] case '*.rar' unrar x $argv[1] case '*.gz' gunzip $argv[1] case '*.tar' tar xf $argv[1] case '*.zip' unzip $argv[1] case '*.Z' uncompress $argv[1] case '*.7z' 7z x $argv[1] default echo "Unsupported file format for '$argv[1]'" end else echo "'$argv[1]' is not a valid file" end end
关键修改说明:
- 移除
(file $argv[1]),直接用$argv[1]作为switch的匹配对象,基于文件名后缀判断格式 - 合并同类tar压缩包的分支(比如
*.tar.bz2和*.tbz2),简化代码 - 所有tar类解压统一使用
tar xf,无需手动指定j/z参数,tar会自动识别压缩格式 - 添加
default分支,当遇到不支持的格式时给出明确提示,避免无反应的情况
内容的提问来源于stack exchange,提问作者Arthur Zhang
相关产品推荐
相关产品推荐

