我最近发现了一些bash
代码使用了函数重定向的鲜为人知(好吧,无论如何我都不知道)特性,例如大大简化的:
function xyzzy () {
echo hello
} >/dev/null
当您使用 simple 调用该函数时xyzzy
,它会自动应用附加到该函数的重定向,而不管您在调用它时做了什么。
我想知道的是是否有任何方法可以在对函数本身的调用中覆盖此行为,以查看正在生成的消息。我不愿更改包含所有功能的文件,因为 (1) 它很大,(2) 它定期更改,以及 (3) 它受到支持它的组织的严格保护。
我试过了:
xyzzy >&1
尝试覆盖它,但输出仍然没有显示(可能是因为>&1
可能被认为是无操作)。
换句话说,给定脚本:
function xyzzy () {
echo hello
} >/tmp/junk
rm -f /tmp/junk
echo ================
echo Standard output
echo ----------------
xyzzy # something else here
echo ================
echo Function capture
echo ----------------
cat /tmp/junk
echo ================
它目前输出:
================
Standard output
----------------
================
Function capture
----------------
hello
================
我可以将xyzzy
调用更改为什么,以便hello
在标准输出部分而不是函数捕获部分打印?
并且这需要在创建文件后不尝试读取文件/tmp/junk
,因为实际的重定向可能是,/dev/null
因此它们不会在文件中。