微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何隐藏bash中的命令输出

我想让我的bash脚本更为优雅的终端用户。我如何隐藏输出当bash正在执行commmands
例如
当bash执行时
yum install nano

以下将显示给执行bash的用户

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!

现在我想隐藏这个从用户,而不是显示

Installing nano ......

我如何完成这个任务。我一定会帮助使脚本更加用户友好。如果错误发生,那么应该向用户显示

编辑我想知道如何显示一个消息,同时执行一组命令

用这个。
{
  /your/first/command
  /your/second/command
} &> /dev/null

说明

要消除命令的输出,您有两个选项:

>关闭输出描述符文件,使其不再接受任何输入。看起来像这样:

your_command "Is anybody listening?" >&-

通常,输出文件描述符1(stdout)或2(stderr)。如果关闭文件描述符,则必须对每个编号的描述符执行此操作,如&> (下面)是与& – :不兼容的特殊BASH语法:

/your/first/command >&- 2>&-

小心注意顺序:>& – closes stdout,这是你想做的; &> – 将stdout和stderr重定向到名为 – (连字符)的文件,这不是您想要做的。它首先看起来是一样的,但后者在你的工作目录中创建一个离散文件。很容易记住:>& 2将stdout重定向到描述符2(stderr),>& 3将stdout重定向到描述符3,并且& – 重定向stdout到死端(即它关闭stdout)。

还要注意一些命令可能不能处理特别好的关闭文件描述符(“写错误:坏文件描述符”),这就是为什么更好的解决方案可能是…
> Redirect output to /dev/null,它接受所有输出,不做任何操作。它看起来像这样:

your_command "Hello?" > /dev/null

对于到文件输出重定向,您可以非常简洁地将stdout和stderr定向到同一个位置,但只能在bash中:

/your/first/command &> /dev/null

最后,对一些命令做同样的事,用大括号括起整个东西。 Bash将此处理为a group of commands,聚合输出文件描述符,以便可以一次重定向所有。如果你熟悉,而不是subshel​​ls使用(command1; command2;)语法,你会发现大括号的行为几乎完全相同的方式,除了除非你涉及他们在一个管道大括号不会创建一个subshel​​l,因此将允许你可以在里面设置变量。

{
  /your/first/command
  /your/second/command
} &> /dev/null

有关更多详细信息,选项和语法,请参阅bash manual on redirections

原文地址:https://www.jb51.cc/bash/391006.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐