gpt4 book ai didi

bash - 如何在 Bash 中隐藏命令输出

转载 作者:行者123 更新时间:2023-11-29 08:39:25 28 4
gpt4 key购买 nike

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

说明

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

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

    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 ,聚合输出文件描述符,以便您可以一次重定向所有内容。如果您熟悉使用 ( command1; command2; ) 语法的子 shell,您会发现大括号的行为方式几乎完全相同,除非您将它们包含在管道中,否则大括号不会创建一个子 shell,从而允许您在其中设置变量。

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

参见 bash manual on redirections了解更多详细信息、选项和语法。

关于bash - 如何在 Bash 中隐藏命令输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18062778/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com