eval - 在 Fish shell 中通过管道传输 eval/source 的输出

标签 eval file-descriptor io-redirection fish

我想将 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/

相关文章:

macros - 编译后,假设程序可以在不调用 eval 的情况下运行吗?

php - 语法错误(似乎没有!)

Python eval 错误抑制

javascript - Javascript eval 的替代品

Bash 读取函数在使用换行符时返回错误代码

c++ - 在 C++ 中重定向

Python 子进程用完文件描述符

file-descriptor - 增加文件描述符数量的 ulimit

python - 如何在 python select() 中增加文件描述符的范围

bash - 将 stdout 和 stderr 都重定向到文件,仅打印 stdout