我想使我的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 ......
我怎样才能完成这个任务?我一定会帮助使脚本更用户友好。如果发生错误,则应将其显示给用户。
我想知道如何在执行一组命令时显示相同的消息。
发布于 2013-08-05 17:06:44
使用这个。
{
/your/first/command
/your/second/command
} &> /dev/null
解释
为了消除命令中的输出,您有两个选项:
&>
(下面)是一种与>&-
不兼容的特殊BASH语法:
/您的/第一个/命令>和-2>和-
注意顺序:>&-
关闭标准,这是您想要做的;&>-
将stdout和stderr重定向到一个名为-
(连字符)的文件,这不是您想要做的。它最初看起来是一样的,但是后者在您的工作目录中创建了一个丢失的文件。很容易记住:>&2
将stdout重定向到描述符2 (stderr),>&3
将stdout重定向到描述符3,>&-
将stdout重定向到死区(即关闭stdout)。
还要注意的是,有些命令可能不能很好地处理关闭的文件描述符(“写错误:坏的文件描述符”),这就是为什么更好的解决方案可能是.最后,要同时对多个命令执行相同的操作,请用大括号包围整个事件。Bash将其视为一组命令,聚合输出文件描述符,以便您可以一次全部重定向。如果您熟悉使用( command1; command2; )
语法的子subshell,则会发现大括号的行为方式几乎完全相同,除非将它们包含在管道中,否则大括号不会创建子subshell,因此允许在其中设置变量。
{
/your/first/command
/your/second/command
} &> /dev/null
有关详细信息、选项和语法,请参阅重定向手册。
发布于 2013-08-05 16:14:22
您可以将stdout重定向到/dev/null。
yum install nano > /dev/null
或者你可以重定向stdout和stderr,
yum install nano &> /dev/null
。
但是如果程序有一个安静的选择,那就更好了。
发布于 2017-05-31 16:10:08
一个进程通常有两个输出要屏幕:stdout (标准输出)和stderr (标准错误)。
通常情况下,信息消息会转到sdout
,而错误和警报则会转到stderr
。
可以通过以下方式关闭命令的stdout
MyCommand >/dev/null
并通过以下操作关闭stderr
:
MyCommand 2>/dev/null
如果您希望和分开,您可以这样做:
MyCommand >/dev/null 2>&1
2>&1
说将stderr发送到与stdout相同的位置。
https://stackoverflow.com/questions/18062778
复制相似问题