echo输出到stderr
是否有一个标准的Bash工具,它像echo一样输出到stderr而不是stdout?
我知道我可以做echo foo 1>&2
但它有点难看,我怀疑,容易出错(例如,当事情发生变化时更有可能被编辑错误)。
#1楼
由于1
是标准输出,因此您不必在输出重定向(如>
前面明确命名,而只需键入:
echo This message goes to stderr >&2
由于您似乎担心1>&2
将难以可靠地键入,因此消除冗余1
可能对您有点鼓励!
#2楼
另外一个选项
echo foo >>/dev/stderr
#3楼
read
是一个shell内置命令,可以打印到stderr,并且可以像echo一样使用而不执行重定向技巧:
read -t 0.1 -p "This will be sent to stderr"
-t 0.1
是一个超时,它禁用read的主要功能,将一行stdin存储到一个变量中。
#4楼
你可以这样做,这有助于阅读:
>&2 echo "error"
>&2
文件描述符# >&2
复制到文件描述符#1。 因此,在执行此重定向之后,两个文件描述符将引用相同的文件:一个文件描述符#2 最初是指。 有关更多信息,请参阅Bash Hackers Illustrated Redirection Tutorial 。
#5楼
如果您不介意将消息记录到syslog中,则not_so_ugly方式为:
logger -s $msg
-s选项表示:“将消息输出到标准错误以及系统日志。”
#6楼
不要使用cat
因为这里提到的一些。 cat
是一个程序,而echo
和printf
是bash(shell)内置的。 启动程序或其他脚本(也在上面提到)意味着创建一个包含所有成本的新流程。 使用内置函数,编写函数非常便宜,因为不需要创建(执行)进程(-environment)。
opner问“是否有任何标准工具输出( 管道 )到stderr”,schort答案是:NO ...为什么? ... rediredcting管道是像unix(Linux ...)和bash(sh)这些概念的系统中的一个元素概念。
我赞同用这样的符号重定向的开场白: &2>1
对现代程序员来说不是很愉快,但那是bash。 Bash并不打算编写庞大而强大的程序,它旨在帮助管理员用更少的按键来完成工作;-)
至少,您可以将重定向放在行中的任何位置:
$ echo This message >&2 goes to stderr
This message goes to stderr
#7楼
不,这是执行此操作的标准方法。 它不应该导致错误。
#8楼
制作一个剧本
#!/bin/sh
echo $* 1>&2
这将是你的工具。
如果您不希望在单独的文件中包含脚本,请创建一个函数。
#9楼
你可以定义一个函数:
echoerr() { echo "$@" 1>&2; }
echoerr hello world
这比脚本更快,没有依赖性。
Camilo Martin的bash特定建议使用“here string”并将打印传递给它的任何内容,包括echo通常会吞下的参数(-n):
echoerr() { cat <<< "$@" 1>&2; }
格伦杰克曼的解决方案也避免了吞咽问题:
echoerr() { printf "%s\n" "$*" >&2; }
#10楼
Mac OS X:我尝试了接受的答案和其他几个答案,所有这些答案导致在我的Mac上写STDOUT而不是STDERR。
以下是使用Perl写入标准错误的可移植方法:
echo WARNING! | perl -ne 'print STDERR'
#11楼
注意:我正在回答帖子 - 而不是误导/模糊的“输出到stderr的回声”问题(已经由OP回答)。
使用函数来显示意图并获得所需的实现。 例如
#!/bin/bash[ -x error_handling ] && . error_handlingfilename="foobar.txt"
config_error $filename "invalid value!"output_xml_error "No such account"debug_output "Skipping cache"log_error "Timeout downloading archive"notify_admin "Out of disk space!"fatal "failed to open logger!"
而error_handling
是:
ADMIN_EMAIL=root@localhostconfig_error() { filename="$1"; shift; echo "Config error in $filename: $*" 2>&1; }output_xml_error() { echo "<error>$*</error>" 2>&1; }debug_output() { [ "$DEBUG"=="1" ] && echo "DEBUG: $*"; }log_error() { logger -s "$*"; }fatal() { which logger >/dev/null && logger -s "FATAL: $*" || echo "FATAL: $*"; exit 100; }notify_admin() { echo "$*" | mail -s "Error from script" "$ADMIN_EMAIL"; }
处理OP问题的原因:
- 最好的语法可能(有意义的单词而不是丑陋的符号)
- 更难出错(特别是如果你重用脚本)
- 它不是标准的Bash工具,但它可以是您或您的公司/组织的标准shell库
其他原因:
- 清晰度 - 显示其他维护者的意图
- 速度 - 函数比shell脚本更快
- 可重用性 - 一个函数可以调用另一个函数
- 可配置性 - 无需编辑原始脚本
- 调试 - 更容易找到导致错误的行(特别是如果你有大量的重定向/过滤输出)
- 健壮性 - 如果缺少一个函数并且您无法编辑脚本,您可以回退使用具有相同名称的外部工具(例如,log_error可以别名为Linux上的记录器)
- 切换实现 - 您可以通过删除库的“x”属性来切换到外部工具
- 输出不可知 - 你不再需要关心它是否转到STDERR或其他地方
- 个性化 - 您可以使用环境变量配置行为
#12楼
这已经得到了很好的回答。 仅供记录:
echo "my errz" > /proc/self/fd/2
将有效输出到stderr
。 说明: /proc/self
是当前进程的链接,而/proc/self/fd
包含进程打开的文件描述符。 然后, 0
, 1
,和2
代表stdin
, stdout
和stderr
分别。
我发现它更具可读性。 这也适用于大多数Linux分发:
echo "my errz" > /dev/stderr
使它更具可读性。
#13楼
我最近偶然发现的另一个选择是:
{echo "First error line"echo "Second error line"echo "Third error line"} >&2
这只使用Bash内置函数,同时使多行错误输出不易出错(因为您不必记住在每行中添加&>2
)。
#14楼
这是一个简单的STDERR函数,它将管道输入重定向到STDERR。
#!/bin/bash
# *************************************************************
# This function redirect the pipe input to STDERR.
#
# @param stream
# @return string
#
function STDERR () {cat - 1>&2}# remove the directory /bubu
if rm /bubu 2>/dev/null; thenecho "Bubu is gone."
elseecho "Has anyone seen Bubu?" | STDERR
fi# run the bubu.sh and redirect you output
tux@earth:~$ ./bubu.sh >/tmp/bubu.log 2>/tmp/bubu.err
echo输出到stderr相关推荐
- tp的echo输出字符串后换行
html 换行 为 <br> 文本 换行 为 "\r\n"(windows),必须要放在双引号中,也可用常量 PHP_EOL $array = [1,2,3,4,5]; ...
- php的header()函数前有echo输出情况分析
php的header()方法一般被用来告知浏览器做一些什么样的操作,比如跳转,刷新等等:而调用header方法前,如果使用echo输出一些内容,会发生什么情况呢?会对header函数有影响吗?我们实验 ...
- php echo输出两个变量,php实现关于var_dump和echo输出多变量的测试
本文主要和大家分享php实现关于var_dump和echo输出多变量的测试,主要以代码的方式和大家分享,希望能帮助到大家.<?php trait A{ public $a = 'a'; priv ...
- echo输出换行_Bash shell教程[5] echo命令
古树屋Click to follow us SongTaste 用音乐倾听彼此 由于后面的例子会大量用到echo命令,这里先介绍这个命令. echo命令的作用是在屏幕输出一行文本,可以将该命令的参数原 ...
- linux echo输出转义换行回车引号
echo 输出引号的正确格式: echo \'123\'echo \"123\" echo 输出回车换行.制表符的正确格式: echo -e '\n123' echo -e &qu ...
- batch echo 输出空格(空行 空白行)
batch echo 输出空格(空行 空白行) https://blog.csdn.net/sxzlc/article/details/104786025 ■前言 为了使显示效果更好 ■实现方法 ec ...
- php echo 输出 锘?... 乱码问题
参考文章: http://blog.csdn.net/fm0517/article/details/43197153 php echo 输出 锘?... 乱码问题 乱码原因: 1.在保存xxx.php ...
- linux shell echo 输出到标准错误 stderr
输出到 标准错误 stderr echo "errormsg" > &2 输出到 标准输出 stdout echo "infomsg" > ...
- nginx echo 输出 检查配置正确性
在上篇文章中,我们有用到变量去控制该域名是否允许访问,在配置过程中,其实变量的值一直是我们想象的,无法确认具体步骤的变量值,因此我希望能在每个步骤中将变量的值打印出来,这是nginx 的echo模块粉 ...
最新文章
- Map接口及其常用方法
- R多变量正态性检验(Multivariate Normality Tests)
- 为什么大厂都用DevOps呢?我来告诉你
- 如何使用python爬取百度图片_【Python】爬取百度图片进行人脸识别
- C++ 操作符优先级
- 类欧几里得算法详细推导过程(附带模板)
- dp合集 广场铺砖问题硬木地板
- 变迁是这个时代最好的机遇
- java.util.current_Java基础知识-java.util.concurrent包下常见类的使用
- 你还在使用xshell绿色破解版?
- 有道云笔记 markdown html,有道云笔记Markdown之流程图
- 中安未来护照阅读器助力电子客票的推广和落实让你的出行说走就走
- linux运维的名言,Linux之父十大名言 你曾听说过几句?
- Python学习笔记-数据分析-Pandas02-Dataframe
- Mac下brew的安装
- 缺失数据的Bootstrap与Jackknife方法:《Statistical Analysis with Missing Data》习题5.1 5.2
- python音乐相册_python爬虫之爬取网易云音乐的歌曲图片和歌词
- cocos2dx 物理引擎chipmunk
- 于神之怒加强版 [Bzoj 4407]
- 今日晚间互联网科技新闻