ena*_*one 2 eval file-descriptor io-redirection fish
我想将 的输出通过管道eval传输到文件。如果命令执行成功,这将按预期工作:
eval ls > log.txt 2>&1
cat log.txt # Documents Desktop
Run Code Online (Sandbox Code Playgroud)
如果命令不成功,它也有效
eval rm Desktop > log.txt 2>&1
cat log.txt # rm: cannot remove 'Desktop': Is a directory
Run Code Online (Sandbox Code Playgroud)
但是,如果命令不存在,我无法重定向 stderr
eval abcde > log.txt 2>&1 # fish: Unknown command abcde
cat log.txt # (empty)
Run Code Online (Sandbox Code Playgroud)
如何将第三种情况的输出也重定向到日志文件?
一些与工作source也将非常赞赏:
echo abcde | source > log.txt 2>&1
Run Code Online (Sandbox Code Playgroud)
但是,如果命令不存在,我无法重定向 stderr
那是因为输出不是来自eval或命令,它来自您的 command-not-found 处理程序。
在尝试执行该命令之前,请尝试检查该命令是否存在。如果你绝对不能,技术上可以通过重新定义来完全消除 command-not-found 错误__fish_command_not_found_handler:
function __fish_command_not_found_handler; end
Run Code Online (Sandbox Code Playgroud)
您必须通过以下方式处理将其移回functions --copy:
functions --copy __fish_command_not_found_handler oldcnf
Run Code Online (Sandbox Code Playgroud)
总的来说,我不推荐任何这些,并怀疑您可能过度使用eval.
与源一起使用的东西也将非常感激:
从字面上看,这就是 eval 的用途。在即将发布的 3.1 版本之前,eval 只是一个source带有一些支持代码的函数,这些代码主要归结为处理这些重定向。