首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Bash中隐藏命令输出

如何在Bash中隐藏命令输出
EN

Stack Overflow用户
提问于 2013-08-05 16:09:59
回答 9查看 290.8K关注 0票数 138

我想使我的Bash脚本更优雅的最终用户。如何在Bash执行命令时隐藏输出?

例如,当Bash执行

代码语言:javascript
运行
复制
yum install nano

执行Bash的用户将看到以下内容:

代码语言:javascript
运行
复制
Loaded plugins: fastestmirror
base                                                     | 3.7 kB     00:00
base/primary_db                                          | 4.4 MB     00:03
extras                                                   | 3.4 kB     00:00
extras/primary_db                                        |  18 kB     00:00
updates                                                  | 3.4 kB     00:00
updates/primary_db                                       | 3.8 MB     00:02
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.0.9-7.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch              Version                Repository       Size
================================================================================
Installing:
 nano            x86_64            2.0.9-7.el6            base            436 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 436 k
Installed size: 1.5 M
Downloading Packages:
nano-2.0.9-7.el6.x86_64.rpm                              | 436 kB     00:00
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
 Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
 Package: centos-release-6-4.el6.centos.10.x86_64 (@anaconda-CentOS-201303020151.x86_64/6.4)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : nano-2.0.9-7.el6.x86_64                                      1/1
  Verifying  : nano-2.0.9-7.el6.x86_64                                      1/1

Installed:
  nano.x86_64 0:2.0.9-7.el6

Complete!

现在,我想向用户隐藏这一点,而不是显示:

代码语言:javascript
运行
复制
    Installing nano ......

我怎样才能完成这个任务?我一定会帮助使脚本更用户友好。如果发生错误,则应将其显示给用户。

我想知道如何在执行一组命令时显示相同的消息。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-08-05 17:06:44

使用这个。

代码语言:javascript
运行
复制
{
  /your/first/command
  /your/second/command
} &> /dev/null

解释

为了消除命令中的输出,您有两个选项:

  • 关闭输出描述符文件,这将阻止它接受任何更多的输入。看起来是这样的: your_command“有人在听吗?” 通常,输出要么转到文件描述符1 (stdout),要么转到2 (stderr)。如果关闭文件描述符,则每个编号描述符都必须关闭,因为&> (下面)是一种与>&-不兼容的特殊BASH语法: /您的/第一个/命令>和-2>和- 注意顺序:>&- 关闭标准,这是您想要做的;&>-将stdout和stderr重定向到一个名为- (连字符)的文件,这不是您想要做的。它最初看起来是一样的,但是后者在您的工作目录中创建了一个丢失的文件。很容易记住:>&2将stdout重定向到描述符2 (stderr),>&3将stdout重定向到描述符3,>&-将stdout重定向到死区(即关闭stdout)。 还要注意的是,有些命令可能不能很好地处理关闭的文件描述符(“写错误:坏的文件描述符”),这就是为什么更好的解决方案可能是.
  • /dev/null,它接受所有的输出,并且对它不做任何操作。看起来是这样的: your_command "Hello?“> /dev/null 对于输出重定向到文件,您可以非常简洁地将stdout和stderr引导到同一个位置,但只能在bash中这样做: /your/first/命令&> /dev/null

最后,要同时对多个命令执行相同的操作,请用大括号包围整个事件。Bash将其视为一组命令,聚合输出文件描述符,以便您可以一次全部重定向。如果您熟悉使用( command1; command2; )语法的子subshell,则会发现大括号的行为方式几乎完全相同,除非将它们包含在管道中,否则大括号不会创建子subshell,因此允许在其中设置变量。

代码语言:javascript
运行
复制
{
  /your/first/command
  /your/second/command
} &> /dev/null

有关详细信息、选项和语法,请参阅重定向手册

票数 302
EN

Stack Overflow用户

发布于 2013-08-05 16:14:22

您可以将stdout重定向到/dev/null。

yum install nano > /dev/null

或者你可以重定向stdout和stderr,

yum install nano &> /dev/null

但是如果程序有一个安静的选择,那就更好了。

票数 48
EN

Stack Overflow用户

发布于 2017-05-31 16:10:08

一个进程通常有两个输出要屏幕:stdout (标准输出)和stderr (标准错误)。

通常情况下,信息消息会转到sdout,而错误和警报则会转到stderr

可以通过以下方式关闭命令的stdout

代码语言:javascript
运行
复制
MyCommand >/dev/null

并通过以下操作关闭stderr

代码语言:javascript
运行
复制
MyCommand 2>/dev/null

如果您希望分开,您可以这样做:

代码语言:javascript
运行
复制
MyCommand >/dev/null 2>&1 

2>&1说将stderr发送到与stdout相同的位置。

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

https://stackoverflow.com/questions/18062778

复制
相关文章

相似问题

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