如何在bash中隐藏命令输出

use*_*277 81 bash shell

我想让我的bash脚本对最终用户更优雅.当bash执行命令时如何隐藏输出例如当bash执行时

yum install nano
Run Code Online (Sandbox Code Playgroud)

以下内容将显示给执行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!
Run Code Online (Sandbox Code Playgroud)

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

Installing nano ......
Run Code Online (Sandbox Code Playgroud)

我怎样才能完成这项任务.我一定会帮助使脚本更加用户友好.如果发生错误,应该向用户显示.

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

Jef*_*ica 228

用这个.

{
  /your/first/command
  /your/second/command
} &> /dev/null
Run Code Online (Sandbox Code Playgroud)

说明

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

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

    your_command "Is anybody listening?" >&-
    
    Run Code Online (Sandbox Code Playgroud)

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

    /your/first/command >&- 2>&-
    
    Run Code Online (Sandbox Code Playgroud)

    小心注意顺序:>&- 关闭标准输出,这是你想要做的; &>-将stdout和stderr重定向到名为-(连字符)的文件,这不是您想要做的.它起初看起来一样,但后者在你的工作目录中创建了一个迷路文件.这很容易记住:>&2将stdout重定向到描述符2(stderr),>&3将stdout重定向到描述符3,>&-并将stdout重定向到死胡同(即它关闭stdout).

    还要注意一些命令可能无法很好地处理关闭的文件描述符("写入错误:错误的文件描述符"),这就是为什么更好的解决方案可能是......

  • 将输出重定向到/dev/null,它接受所有输出并且不对其执行任何操作.它看起来像这样:

    your_command "Hello?" > /dev/null
    
    Run Code Online (Sandbox Code Playgroud)

    对于输出重定向到文件,您可以非常简洁地将stdout和stderr指向同一个地方,但仅限于bash:

    /your/first/command &> /dev/null
    
    Run Code Online (Sandbox Code Playgroud)

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

{
  /your/first/command
  /your/second/command
} &> /dev/null
Run Code Online (Sandbox Code Playgroud)

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


ktm*_*124 31

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

yum install nano > /dev/null

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

yum install nano &> /dev/null.

但如果该计划有一个安静的选择,那就更好了.


LeO*_* Li 16

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

通常是信息性消息sdout,以及错误和警报stderr.

您可以stdout通过执行来关闭命令

MyCommand >/dev/null
Run Code Online (Sandbox Code Playgroud)

stderr通过这样做来关闭:

MyCommand 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

如果你想要两个都关闭,你可以这样做:

MyCommand 2>&1 >/dev/null
Run Code Online (Sandbox Code Playgroud)

2>&1说标准错误发送到相同的地方标准输出.


Giu*_*Pes 6

您可以将输出重定向到/dev/null.有关/ dev/null的更多信息,请阅读此链接.

您可以通过以下方式隐藏命令的输出:

echo -n "Installing nano ......"; yum install nano > /dev/null; echo " done."; 
Run Code Online (Sandbox Code Playgroud)

将标准输出重定向到/dev/null但不是标准错误.这将显示安装期间发生的错误,例如,如果yum找不到包.

echo -n "Installing nano ......"; yum install nano &> /dev/null; echo " done.";
Run Code Online (Sandbox Code Playgroud)

虽然此代码不会在终端中显示任何内容,因为标准错误和标准输出都被重定向,因此无效/dev/null.


Qua*_*ong 5

>/dev/null 2>&1将静音stdoutstderr

yum install nano >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)