首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何消除nushell中的错误信息?

如何消除nushell中的错误信息?
EN

Stack Overflow用户
提问于 2022-11-20 16:14:46
回答 2查看 40关注 0票数 1

在巴什,我会做这样的事

代码语言:javascript
复制
...
...
if ! cd non_exist_dir > /dev/null 2>&1; then
  echo "error in cd"
  return 1
fi
...
...

我该怎么用惯用的nushell呢?

特别是,由于目录不存在,我如何摆脱nushell显示的恼人的错误消息?

如果我能得到类似于“返回”命令之类的东西的话,我会得到额外的分数,这似乎在nushell中丢失了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-12-03 06:07:06

努希尔0.72引入了try/catch块,这些块可以抑制或替换Nushell的错误处理。以你为例:

代码语言:javascript
复制
try {
    cd non_exist_dir
} catch {
    print -e "error in cd"
}

至于问题的另一部分,返回代码似乎只有在返回到非Nushell进程时才是有用的。Nushell内部的任何错误处理都可以使用Nushell错误和try/catch块。

但是,如果您正在返回一个非Nushell过程,那么您可以使用exit <status_code>内置程序。

这只适用于以下两种情况之一:

  • 剧本
  • nu -c "<commands>"的调用

但是,在这两种情况下,简单的cd都无法工作,因为这两种情况都会启动新的Nushell shell (尝试说10倍的速度),当该shell退出时,环境将返回到它的入口状态(即使使用def-env)。

但是,如果您在cd之后做了一些事情,那么将其包含在脚本中是有意义的。例如,一个silly_cd.nu (愚蠢,因为除了作为exit的演示之外,它是非常无用的):

代码语言:javascript
复制
#!/usr/bin/env nu
def main [d?: string] {
    if ($d == null) {
        # Prevent sourced function from exiting Nushell
        return
    }
    try {
        cd $d
    } catch {
        print -e "Error in cd"
        exit 1
    }
    ls
}
票数 1
EN

Stack Overflow用户

发布于 2022-11-20 20:48:03

一个解决方案是创建一个自定义命令,如下所示。

代码语言:javascript
复制
def-env mycd [path] {
  let p = (if ($path | path exists) { $path } else { $env.PWD })
  cd $p
}

这解决了部分问题,通过检查文件夹是否存在而消除错误消息,如果存在,则使用该路径。如果它不存在,它只使用当前目录。

这并不能解决第二部分返回的问题,但是可以预见将$env.LAST_EXIT_CODE设置为某种值。你必须四处游玩,看看这是否有效,是否符合你的需要。祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74509786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档