如何将Linux命令默认的提示结果不显示或者不输出?以及在脚本中如何替代Ctrl + C等关闭命令的终端窗口?

一、问题描述:

当我们想要获取命令的输出结果时,有时候命令会带出一些默认的提示信息输出到屏幕上,如何过滤掉这个提示信息呢?

例如,telnet命令退出时会默认提示“Connection closed by foreign host.”

如何将Linux命令默认的提示结果不显示或者不输出?以及在脚本中如何替代Ctrl + C等关闭命令的终端窗口?_第1张图片

 例如,执行mysql -uroot -pPassword命令,会默认提示"mysql: [Warning] Using a password on the command line interface can be insecure."

如何将Linux命令默认的提示结果不显示或者不输出?以及在脚本中如何替代Ctrl + C等关闭命令的终端窗口?_第2张图片

二、解决方法:

1、命令默认输出的相关提示一般为错误输出,可以使用2> 或者 2>&1 将相关输出的提示信息进行重定向到文件中。

标准输入(stdin)    0    /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0
标准输出(stdout)    1    /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0
标准错误输出(stderr)    2    /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0
 

举例:

1)command 2>file :

错误输出到文件file。

>sleep 1 | telnet 127.0.0.1 10050 2> /tmp/test
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
# 标准输出到终端

>cat /tmp/test
Connection closed by foreign host. 
# 错误输出到文件file

2)command 2>&1 >file :

错误输出到终端,标准输出被重定向到文件file。

>sleep 1 | telnet 127.0.0.1 10050 2>&1 > /tmp/test
Connection closed by foreign host. 
# 错误输出到终端

>cat /tmp/test
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
# 标准输出到test文件


3)command >file 2>&1 :

标准输出已经被重定向到文件file,然后错误输出也重定向到和标准输出一样,所以也错误输出到文件file。

>sleep 1 | telnet 127.0.0.1 10050 > /tmp/test 2>&1
# 终端无任何输出

>cat /tmp/test
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Connection closed by foreign host.
# 标准输出和错误输出即提示内容都重定向到test文件

三、在脚本中如何替代Ctrl + C等关闭命令的终端窗口?

可以通过以下方式将telnet命令关闭

sleep 1 | telnet 127.0.0.1 10050


echo -e "\n" | telnet 10.127.0.0.1 10050


echo "" | telnet 127.0.0.1 10050

你可能感兴趣的:(Linux命令详解,报错解决&技巧方法,linux,服务器,shell)