我想将 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
最佳答案
However, I do not manage to redirect stderr if the command does not exist
那是因为输出不是来自 eval
或命令,它来自您的命令未找到处理程序。
在尝试执行该命令之前,请尝试检查该命令是否存在。如果您绝对不能,从技术上讲,可以通过重新定义 __fish_command_not_found_handler
来完全消除命令未找到错误。 :
function __fish_command_not_found_handler; end
之后您必须通过 functions --copy
将其移回:
functions --copy __fish_command_not_found_handler oldcnf
总的来说,我不推荐任何这些,并怀疑您可能过度使用 eval
.
Something that works with source would also be very much appreciated:
从字面上看,这就是 eval 的用途。到即将发布的 3.1 版本,eval 函数只是 source
一些支持代码主要归结为处理这些重定向。
关于eval - 在 Fish shell 中通过管道传输 eval/source 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59311500/