将评估/来源的输出通过管道传递到鱼壳中

我想将eval的输出传递给文件。如果命令执行成功,那将按预期工作:

eval ls > log.txt 2>&1
cat log.txt # Documents Desktop

如果命令不成功,它也可以工作

eval rm Desktop > log.txt 2>&1
cat log.txt # rm: cannot remove 'Desktop': Is a directory

但是,如果该命令不存在,我将无法重定向stderr

eval abcde > log.txt 2>&1 # fish: Unknown command abcde
cat log.txt # (empty)

如何将第三种情况的输出也重定向到日志文件?


source兼容的事物也将不胜感激:

echo abcde | source > log.txt 2>&1
aishenghuo2009 回答:将评估/来源的输出通过管道传递到鱼壳中

  

但是,如果该命令不存在,我将无法重定向stderr

这是因为输出不是来自eval或命令,而是来自命令未找到的处理程序。

在尝试执行命令之前,请先检查该命令是否存在。如果绝对不能,则在技术上可以通过重新定义__fish_command_not_found_handler来完全消除未找到的命令错误:

function __fish_command_not_found_handler; end

您随后必须通过functions --copy将其移回:

functions --copy __fish_command_not_found_handler oldcnf

总体上,我不推荐任何一种方式,并怀疑您可能过度使用eval

  

非常适合与源代码结合的事物:

这实际上是eval的目的。在即将到来的3.1版本中,eval只是一个source函数,带有一些支持代码,这些支持代码大部分都归结为处理这些重定向。

本文链接:https://www.f2er.com/2931483.html

大家都在问