如何在bash中隐藏命令输出

我想让我的bash脚本对于最终用户来说更优雅。当bash执行命令时,如何隐藏输出例如,当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 

说明

为了消除命令的输出,你有两个select:

  • closures输出描述符文件,避免接受任何更多的input。 看起来像这样:

     your_command "Is anybody listening?" >&- 

    通常,输出到文件描述符1(标准输出)或2(标准错误)。 如果closures文件描述符,则必须为每个已编号的描述符执行此操作,因为&> (下)是一种特殊的BASH语法,它与>&-不兼容:

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

    注意顺序: >&- closuresstdout ,这是你想要做的; &>-将stdout和stderrredirect到一个名为- (连字号)的文件,这不是你想要做的。 它看起来是一样的,但后者在你的工作目录中创build一个零星的文件。 很容易记住: >&2将stdoutredirect到描述符2(stderr), >&3将stdoutredirect到描述符3, >&-将stdoutredirect到死路(即closuresstdout)。

    还要注意,有些命令可能不能处理一个closures的文件描述符(“写入错误:错误的文件描述符”),这就是为什么更好的解决scheme可能是…

  • 将输出redirect到/dev/null ,它接受所有输出并且不执行任何操作。 它看起来像这样:

     your_command "Hello?" > /dev/null 

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

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

最后,为了同时执行一些命令,用大括号将整个事情包围起来。 Bash将其视为一组命令 ,聚合输出文件描述符,以便您可以一次redirect。 如果你熟悉使用( command1; command2; )语法的subshel​​l,你会发现大括号的行为几乎完全一样,除非你把它们包含在一个pipe道中,否则大括号将不会创build子shell,你在里面设置variables。

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

有关更多详细信息,选项和语法,请参阅redirect上的bash手册 。

你可以将stdoutredirect到/ dev / null。

yum install nano > /dev/null

或者你可以redirectstdout和stderr,

yum install nano &> /dev/null

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

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

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

 echo -n "Installing nano ......"; yum install nano > /dev/null; echo " done."; 

将标准输出redirect到/dev/null ,但不是标准错误。 这将显示在安装过程中发生的错误,例如,如果yum找不到包。

 echo -n "Installing nano ......"; yum install nano &> /dev/null; echo " done."; 

虽然此代码不会在terminal中显示任何内容,因为标准错误和标准输出都会redirect,因此将其废除为/dev/null

在这种情况下,你不应该使用bash来摆脱输出。 百胜确实有一个选项-q抑制输出。

你当然也想用-y

 echo "Installing nano..." yum -y -q install nano 

要查看yum的所有选项,请使用man yum

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

 yum install nano >/dev/null 2>&1 

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

正常情况下,信息性消息将发送到sdout ,错误和警报将发送到stderr

您可以通过执行closuresstdout命令

 MyCommand >/dev/null 

并通过执行closuresstderr

 MyCommand 2>/dev/null 

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

 MyCommand 2>&1 >/dev/null 

2>&1表示将stderr发送到与stdout相同的地方。