当前位置: 首页 > 知识库问答 >
问题:

如何在Bash中隐藏命令输出

章飞章
2023-03-14

我想让我的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 ......

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

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

共有3个答案

仉伟兆
2023-03-14
匿名用户

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

通常情况下,信息消息会进入sdout,错误和警报会进入stderr

您可以通过执行以下操作来关闭命令的stdout

MyCommand >/dev/null

然后通过执行以下操作关闭stderr:

MyCommand 2>/dev/null

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

MyCommand 2>&1 >/dev/null

2

羊舌承天
2023-03-14

您可以将标准输出重定向到/dev/null。

yum安装nano

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

yum安装nano

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

陆英毅
2023-03-14
{
  /your/first/command
  /your/second/command
} &> /dev/null

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

>

  • 关闭输出描述符文件,以防止其接受更多输入。看起来是这样的:

    your_command "Is anybody listening?" >&-
    

    通常,输出到文件描述符1(stdout)或2(stderr)。如果关闭文件描述符,则必须对每个编号描述符执行此操作,如

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

    注意顺序:

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

    将输出重定向到/dev/null,它接受所有输出,但不处理任何输出。看起来是这样的:

    your_command "Hello?" > /dev/null
    

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

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

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

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

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

  •  类似资料:
    • 问题内容: 我知道命令行界面(例如Git等)能够隐藏用户的输入(对于密码有用)。有没有办法用Java编程地做到这一点?我正在从用户那里输入密码,我希望他们的输入在该特定行(而不是所有用户)上被“隐藏”。这是我的代码(尽管我怀疑这会有所帮助…) 问题答案: 尝试。不过,您至少必须运行Java 6。 请注意,这不适用于Eclipse控制台。您必须从 真实的 console / shell / term

    • 我正在使用Jasypt加密并在属性文件的ENC()中指定属性值。解密密码是通过命令行参数发送的,如下。一切正常,但问题是当我搜索正在运行的进程时,它也显示密码。有没有办法通过从某处读取来隐藏加密密码? 我曾想过使用环境变量,但这也可能会暴露密码。所以,决定反对。 更新:有一个解决方案,在另一个所以Spring开机后如何隐藏密码在属性文件? 我遵循的解决方案是创建一个名为JASYPT\u ENCRY

    • 我是bash的新手。当我尝试使用命令进行比较时,我遇到了如下问题: 在我的教程中,应该等于

    • 输入一个语句后按回车键,MATLAB自动在屏幕上显示结果,但如果该行命令是以";"结尾,则MATLAB仍会进行运算赋值,但不显示任何输出结果.这一点在生成复杂矩阵时特别有用.例如: A = magic(100);

    • 问题内容: 我在Ubuntu上使用,并且有一个Python 2.7脚本可以打印并说出一条消息: 产生所需的声音,但由于一些错误(,没有套接字连接)而使外壳混乱,因此我无法轻松读取之前打印的内容。退出代码为0。 不幸的是,没有记录的选项可以关闭它的冗长性,因此我正在寻找一种方法,仅在视觉上使其静音并保持打开的外壳干净以进行进一步的交互。 我怎样才能做到这一点? 问题答案: 将输出重定向到DEVNUL

    • 我想使用Selenium ChromeDriver打开Chrome浏览器,而不让Chrome消息输出到控制台。 我想隐藏输出消息"DevTools监听..." 但这一信息仍在显现。如何隐藏输出消息“DevTools侦听…”用Python?