在使用STDOUT统一它之前,有没有办法在bash中通过过滤器管道STDERR?那就是我想要的
STDOUT ?????????????????
??????> terminal/file/whatever
STDERR ?? [ filter ] ???
Run Code Online (Sandbox Code Playgroud)
而不是
STDOUT ?????
?????[ filter ]???> terminal/file/whatever
STDERR ?????
Run Code Online (Sandbox Code Playgroud) 我有一个程序,其STDERR输出我想检查和运行grep等.
所以我可以将它重定向到STDOUT并使用grep,但问题是,我不想要原始STDOUT内容.
所以,这个不会做
cmd 2>&1 | grep pattern
Run Code Online (Sandbox Code Playgroud)
因为它会混合原始的STDOUT和STDERR.
而且这个不起作用,因为grep没有读取STDERR输出:
cmd 1>/dev/null | grep pattern
Run Code Online (Sandbox Code Playgroud)
但是,这个也行不通:
cmd 1>/dev/null 2>&1 | grep pattern
Run Code Online (Sandbox Code Playgroud)
因为输出将完全为空,因为所有内容都被写入/dev/null.
但必须有一个简单的方法来做到这一点?
我在对cyberciti.biz的评论中看到了这个有趣的问题.
我发现我甚至找不到一种灵活的方法来用sh执行单行命令.
到目前为止,我对解决方案的想法是:
tmp_file=`mktemp`
(./script 2>$tmp_file >/dev/null; cat $tmp_file) | ./other-script
rm tmp_file
Run Code Online (Sandbox Code Playgroud)
但是你看,这不是同步的,而且很致命,它太难看了.
欢迎大家分享一下这个.:)
我想lint一个文件,并打印stderr(错误消息),但不打印stdout(说该文件没问题).
php -l "foo/bar.php"
Run Code Online (Sandbox Code Playgroud)
我认为这将是一些魔术>&,但我从来没有理解这些是如何工作的.
我想要的是消耗所有stdout,保持stderr.
(对不起,如果这是假的,但我没有发现任何确切的问题)
我在 bash 脚本中有一系列管道命令,将标准输出管道到标准输入:
prog1 | prog2 | prog3
Run Code Online (Sandbox Code Playgroud)
他们每个人都输出一些标准错误。他们中的一些输出覆盖前一行,一些没有,有些两者都做:例如输出几行输出,然后在shell中有一个更新的“状态栏”。例如,curl 可以将下载进度输出为状态栏。
输出相当不清楚,因为状态栏可能会在一个进程的输出和另一个进程的输出之间闪烁。
有没有办法让各种输出更清晰,例如
闪烁示例:
如果它们不是divx或xvid(DX50,即不可读),我经常在使用我的电视DVD播放器阅读AVI文件时遇到问题.
我想制作一个快速脚本来识别这些文件的视频编解码器,然后再将其刻录到cdrom/dvd上.
命令 :
ffmpeg -i file.avi
Run Code Online (Sandbox Code Playgroud)
给出视频流的"容器"(mpeg4,mpeg2等),而不是编解码器.
任何提示?
谢谢
我正在阅读重定向数据/dev/null,所以我尝试了一个简单的测试:
ping a.b.c # which results in an address not found
Run Code Online (Sandbox Code Playgroud)
如果我试试这个:
ping a.b.c > /dev/null # prints the same error message as the one above
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做:
ping a.b.c > /dev/null 2>&1 # The error message is gone
Run Code Online (Sandbox Code Playgroud)
最后的解决方案是理想的解决方案,但是发生了2>&1什么?到目前为止,我的研究表明,2代表stderr和1代表stdout.因此,如果我以这种方式阅读,看起来我正在创建一个stderr文件并重定向stdout到它?
如果是这种情况,&该命令的作用是什么?
当尝试从make过滤特定警告或错误消息的非常长的输出时,第一个想法是这样的:
$ make | grep -i 'warning: someone set up us the bomb'
Run Code Online (Sandbox Code Playgroud)
但结果并不完全令人满意.输出将不仅包含从筛选结果grep,还stdout和stderr消息从在使用的其他工具make的目标的地方.
现在的问题是:
I want to use aws lambda update-function-code command to deploy the code of my function. The problem here is that aws CLI always prints out some information after deployment. That information contains sensitive information, such as environment variables and their values. That is not acceptable as I'm going to use public CI services, and I don't want that info to become available to anyone. At the same time I don't want to solve this by directing everything from AWS command …
我正在运行一个名为stm的程序.我想只保存文本文件中包含文本"ERROR"的那些stderr消息.我也想要控制台上的消息.
我怎么用bash做到这一点?