我正在从bash转移到nushell。我的一个步骤就是转移这个函数:
ex ()
{
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via ex()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
我在纽谢尔写道:
def ex [$file?: string] {
if $file == null {"No file defined"} else {
if $file == *.tar.bz2 {
tar xjf $file;
}
else if $file == *.tar.gz {
tar xzf $file;
}
else if $file == *.bz2 {
bunzip2 $file;
}
else if $file == *.rar {
unzip $file;
}
else if $file == *.gz {
gunzip $file;
}
else if $file == *.tar {
tar xf $file;
}
else if $file == *.tbz2 {
tar xjf $file;
}
else if $file == *.tgz {
tar xzf $file;
}
else if $file == *.zip {
unzip $file;
}
else if $file == *.Z {
uncompress $file;
}
else if $file == *.7z {
7z x $file;
}
}
}
但是当我用这个命令测试它的时候(我在执行命令的目录下有一个openssl源代码存档):ex openssl-1.1.1.tar.gz
,我得到这个错误:`
ex openssl-1.1.1.tar.gz
Error: nu::shell::external_command (link)
× External command failed
╭─[/home/ysyltbya/.config/nushell/config.nu:523:1]
523 │ }
524 │ else if $file == *.tar.gz {
· ──┬─
· ╰── did you mean 'ls'?
525 │ tar xzf $file;
╰────
help: No such file or directory (os error 2)
我不明白出了什么问题。
1条答案
按热度按时间j9per5c41#
主要的问题是您仍然在尝试使用Bash模式进行字符串匹配。您可以在Nushell中使用以下两种方法之一来完成此操作:
ends-with
字符串比较运算符:但是,您可能会考虑一种功能性更强/数据驱动/Nushell的方法:
备注:
case
unzip
命令在rar
文件上的使用。可能是我自己在这个过程中引入了一些其他的转录错误!case
或if
/else
的正常“短路”行为,但影响很小。case
/if
/else
的行为。