在巴什,我会做这样的事
...
...
if ! cd non_exist_dir > /dev/null 2>&1; then
echo "error in cd"
return 1
fi
...
...我该怎么用惯用的nushell呢?
特别是,由于目录不存在,我如何摆脱nushell显示的恼人的错误消息?
如果我能得到类似于“返回”命令之类的东西的话,我会得到额外的分数,这似乎在nushell中丢失了。
发布于 2022-12-03 06:07:06
努希尔0.72引入了try/catch块,这些块可以抑制或替换Nushell的错误处理。以你为例:
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的演示之外,它是非常无用的):
#!/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
}发布于 2022-11-20 20:48:03
一个解决方案是创建一个自定义命令,如下所示。
def-env mycd [path] {
let p = (if ($path | path exists) { $path } else { $env.PWD })
cd $p
}这解决了部分问题,通过检查文件夹是否存在而消除错误消息,如果存在,则使用该路径。如果它不存在,它只使用当前目录。
这并不能解决第二部分返回的问题,但是可以预见将$env.LAST_EXIT_CODE设置为某种值。你必须四处游玩,看看这是否有效,是否符合你的需要。祝好运。
https://stackoverflow.com/questions/74509786
复制相似问题