Linux 在函数中重定向stderr
在特定函数stderr中,是否有任何方法可以将上一个命令重定向到文件?以下是示例代码:Linux 在函数中重定向stderr,linux,bash,shell,unix,sh,Linux,Bash,Shell,Unix,Sh,在特定函数stderr中,是否有任何方法可以将上一个命令重定向到文件?以下是示例代码: #! /bin/bash error_action () { echo "Failed! Check $ERR_LOG" exit 1 } apt-get install -y build-essential linux-headers-$(uname -r) >/dev/null || error_action (重新编辑以回答问题) 如果要捕获apt get命令的stderr
#! /bin/bash
error_action () {
echo "Failed! Check $ERR_LOG"
exit 1
}
apt-get install -y build-essential linux-headers-$(uname -r) >/dev/null || error_action
(重新编辑以回答问题)
如果要捕获apt get
命令的stderr输出,并在检查命令的退出状态后使用它,最好的方法是将输出捕获到文件中,然后将其输出
apt-get ..... 2>$tmp_file || (echo "Failed! Check $ERR_LOG" | cat - $tmp_file)
如果需要,
cat
可以选择性地重定向到stderr。使用此命令将错误重定向到日志文件
echo "Failed! Check $ERR_LOG" 2>log_file
将错误重定向到dev/null并在屏幕上打印输出
apt-get install -y build-essential linux-headers-$(uname -r) 2>/dev/null || error_action
试试这个
apt-get install -y build-essential linux-headers-$(uname -r) 2>$ERR_LOG 1>/dev/null || error_action
这将把命令的stderr输出放在错误日志文件中,稍后您将从error方法打印该文件,并将stdout设置为原始命令中的
dev/null
。您要查找的内容称为“进程替换”,您可以在bash的手册页的“扩展”部分中阅读
任何文件句柄(包括stdout和stderr)都可以重定向到文件或管道。(命令)
的符号处理输出。只要定义了shell函数,就可以使用命令。例如,尝试以下方法:
#!/bin/bash
errout () {
sed 's/^/ERROR> /'
}
stdout () {
sed 's/^/stdout> /'
}
ls -l /bin/ls /nonexistent 2> >(errout) > >(stdout)
在我的系统上,ls
将为/bin/ls
显示一行到标准输出的代码,并为/nonexistent
显示一个到标准输出的错误:
$ ./errtest
ERROR> ls: /nonexistent: No such file or directory
stdout> -r-xr-xr-x 1 root wheel 32672 Nov 8 2012 /bin/ls
$
注意重定向的顺序。重定向按照它们出现的顺序处理,从左到右。您要求重定向错误到文件。函数应该将先前命令的STDRR输出重定向到一个特定文件,然后运行ECHO“失败!检查$ErryLoad”DKY,您考虑使用<代码> Logger-<代码>(命令执行<代码> SysLog)。?我已经尝试过-stderr输出仍然显示在屏幕上。尝试这一回显“失败!检查$ERR_LOG”2>LOG_文件它会将错误重定向到文件,直到相同的事情发生(抱歉-误解的问题-您想重定向stderr或get apt命令,而不是错误动作()它正在工作,但有一点不像我想要的那样-2>$ERR\u LOG应该在某种程度上起作用。