我知道如何制作文件描述符的别名
exec 3>&1 1> /dev/null
echo "hello world" >&3
但这不可读。有没有办法使它可读(意味着代替>& 3我可以写LOG或INFO或DEBUG)?
答案 0 :(得分:1)
您只需使用参数来存储要使用的文件描述符。
exec 3>&1 1>/dev/null
LOG=3
echo "hello world" >&$LOG
您不能将>&
部分存储在参数中,因为这是shell语法,而不是数据。但是,您可以编写一个函数,将其参数输出到特定的文件描述符。
LOG () {
echo "$@" >&3
}
LOG "hello world"
答案 1 :(得分:0)
如果你写&1
,你可以参考标准输出,它用于输出。您还使用>
进行重定向,用于输出。
如果您关心输入,您可以通过引用&0
来使用标准输入。在这种情况下,您还应该使用<
作为输入。
例如:
exec 3<&0
有关更多信息,请键入man bash
并查找有关重定向的部分。
答案 2 :(得分:0)
我不明白为什么你想要fd 3。 在我的解决方案中,我展示了如何混合fd1和fd3:
function opendebug {
exec 3>&1 1> /dev/null
}
function mylog {
level=$1
shift
printf "(fd 1) %s: %s\n" "${level}" "$*"
printf "(fd 3) %s: %s\n" "${level}" "$*" >&3
}
function logerror {
if [ ${loglevel} -ge 1 ]; then
mylog "ERROR" "$*"
fi
}
function loginfo {
if [ ${loglevel} -ge 3 ]; then
mylog "INFO" "$*"
fi
}
function logdebug {
if [ ${loglevel} -ge 5 ]; then
mylog "DEBUG" "$*"
fi
}
export loglevel=3
logerror "Line with error"
loginfo "Line with info"
logdebug "Line with debug" # will be suppressed
echo Open debug
opendebug
logerror "Line with error"
loginfo "Line with info"
logdebug "Line with debug" # will be suppressed
输出:
(fd 1) ERROR: Line with error
(fd 1) INFO: Line with info
Open debug
(fd 3) ERROR: Line with error
(fd 3) INFO: Line with info