相关疑难解决方法(0)

仅通过过滤器管道STDERR

在使用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)

linux bash redirect

70
推荐指数
6
解决办法
3万
查看次数

如何将STDERR重定向到STDOUT,但忽略原始STDOUT?

我有一个程序,其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.

但必须有一个简单的方法来做到这一点?

bash redirect stdout

60
推荐指数
1
解决办法
4万
查看次数

Shell:将stdout重定向到/ dev/null,将stderr重定向到stdout

我在对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)

但是你看,这不是同步的,而且很致命,它太难看了.

欢迎大家分享一下这个.:)

linux bash shell sh

47
推荐指数
2
解决办法
5万
查看次数

Bash打印stderr,而不是stdout

我想lint一个文件,并打印stderr(错误消息),但不打印stdout(说该文件没问题).

php -l "foo/bar.php"
Run Code Online (Sandbox Code Playgroud)
  • 如果没有错误,它会向stdout输出"No errors"消息.
  • 如果有错误,它会向stderr输出详细消息.我只想要这个.

我认为这将是一些魔术>&,但我从来没有理解这些是如何工作的.

我想要的是消耗所有stdout,保持stderr.

(对不起,如果这是假的,但我没有发现任何确切的问题)

linux bash

38
推荐指数
2
解决办法
3万
查看次数

管道命令链,每个输出状态到标准错误

我在 bash 脚本中有一系列管道命令,将标准输出管道到标准输入:

prog1 | prog2 | prog3
Run Code Online (Sandbox Code Playgroud)

他们每个人都输出一些标准错误。他们中的一些输出覆盖前一行,一些没有,有些两者都做:例如输出几行输出,然后在shell中有一个更新的“状态栏”。例如,curl 可以将下载进度输出为状态栏。

输出相当不清楚,因为状态栏可能会在一个进程的输出和另一个进程的输出之间闪烁。

有没有办法让各种输出更清晰,例如

  • 明确哪个输出行来自链中的哪个程序?
  • 让所有状态栏同时可见,不闪烁?

闪烁示例:

在此处输入图片说明

bash stdin stdout pipe stderr

20
推荐指数
2
解决办法
273
查看次数

如何使用ffmpeg识别文件的视频编解码器

如果它们不是divx或xvid(DX50,即不可读),我经常在使用我的电视DVD播放器阅读AVI文件时遇到问题.

我想制作一个快速脚本来识别这些文件的视频编解码器,然后再将其刻录到cdrom/dvd上.

命令 :

ffmpeg -i file.avi
Run Code Online (Sandbox Code Playgroud)

给出视频流的"容器"(mpeg4,mpeg2等),而不是编解码器.

任何提示?

谢谢

video ffmpeg

19
推荐指数
2
解决办法
3万
查看次数

cmd>/dev/null 2>&1如何工作?

我正在阅读重定向数据/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代表stderr1代表stdout.因此,如果我以这种方式阅读,看起来我正在创建一个stderr文件并重定向stdout到它?

如果是这种情况,&该命令的作用是什么?

unix linux bash shell

11
推荐指数
1
解决办法
2万
查看次数

Grepping Make Output

当尝试从make过滤特定警告或错误消息的非常长的输出时,第一个想法是这样的:

$ make | grep -i 'warning: someone set up us the bomb'
Run Code Online (Sandbox Code Playgroud)

但结果并不完全令人满意.输出将不仅包含从筛选结果grep,还stdoutstderr消息从在使用的其他工具make的目标的地方.

现在的问题是:

  1. 其他输出来自哪里?
  2. 如何编写输出只包含过滤行的过滤器命令?

grep makefile

11
推荐指数
1
解决办法
6395
查看次数

如何抑制 aws lambda cli 输出

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 …

aws-cli aws-lambda

11
推荐指数
1
解决办法
1804
查看次数

bash命令在stderr上grep某些东西并将结果保存在文件中

我正在运行一个名为stm的程序.我想只保存文本文件中包含文本"ERROR"的那些stderr消息.我也想要控制台上的消息.

我怎么用bash做到这一点?

bash shell

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

bash ×7

linux ×4

shell ×3

redirect ×2

stdout ×2

aws-cli ×1

aws-lambda ×1

ffmpeg ×1

grep ×1

makefile ×1

pipe ×1

sh ×1

stderr ×1

stdin ×1

unix ×1

video ×1