首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重定向bash shell中的流--如何在shell命令行的其余部分无条件地执行

重定向bash shell中的流--如何在shell命令行的其余部分无条件地执行
EN

Unix & Linux用户
提问于 2018-08-04 13:55:12
回答 2查看 219关注 0票数 1

我注意到apt输出在单独执行Bash和输出重定向到文件时是不同的。

例如:

代码语言:javascript
复制
$ apt install ./*.deb --simulate 1>111.txt 2>222.txt

添加重定向会导致流2文件中的文本WARNING: apt does not have a stable CLI interface. Use with caution in scripts.,而运行apt w/out重定向则不会在shell窗口中显示此文本。

为什么输出依赖于重定向?也许apt把重定向看作它的参数?如何将重定向写成不被注意到shell命令行的其他部分?

我在Ubuntu18中看到了它,apt是一个特定的应用程序,但可能这个问题对于Unix来说很普遍,所以我只在标签中添加了shell

EN

回答 2

Unix & Linux用户

发布于 2018-08-04 14:00:29

apt的设计历史上考虑到了交互式命令行的使用,因此出现了编码警告,这是在apt中进行的,而不是由shell完成的。

然而,apt并不一定解析命令行;当它调用apt时,shell已经完成了这一工作。apt正在做的是检测stdout流是否已被更改/重定向。

至于在脚本中使用apt,您已经得到了类似的旧命令apt-get,它做的事情大致相同,并且在stdout被重定向时没有给出警告。

TLDR不是用stderr编写错误消息的shell,而是apt命令。

您能够在shell中捕获apt stderr输出的事实是Unix是一个多任务操作系统的工件,并不意味着它是生成该输出的shell。

PS。在执行命令时,可以看到apt正在编写该消息:

代码语言:javascript
复制
strace apt get install bash > a
....
write(2, "\n", 1
)                       = 1
write(2, "WARNING: ", 9WARNING: )                = 9
write(2, "apt", 3apt)                      = 3
write(2, " ", 1 )                        = 1
write(2, "does not have a stable CLI inter"..., 38does not have a stable CLI interface. ) = 38
write(2, "Use with caution in scripts.", 28Use with caution in scripts.) = 28
write(2, "\n", 1
)                       = 1
write(2, "\n", 1
)                       = 1
票数 2
EN

Unix & Linux用户

发布于 2018-08-14 00:15:59

“如何将重定向写成不被注意到shell命令行的其他部分?”

你不需要做任何事情,警告是在stdErr上。试试这个:

代码语言:javascript
复制
apt list adghdgd | grep .
2>/dev/null apt list adghdgd | grep .

如果在默认情况下您的分布颜色为grep,您将看到实际到grep的部分会被着色。在第二种形式中,stdErr会被抑制。

Grep的行为也不同,比较如下:

代码语言:javascript
复制
echo hello | grep .
echo hello | grep . | cat

第二种形式是不着色的,因为grep注意到它的stdOut不是终端,而是管道。他/她怎么知道?

比较

代码语言:javascript
复制
ls -l /proc/self/fd/1
( ls -l /proc/self/fd/1 ) | cat

在第一种形式中,stdOut是tty/pts。在第二部分,是一根管子。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/460503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档