一、问题描述:
当我们想要获取命令的输出结果时,有时候命令会带出一些默认的提示信息输出到屏幕上,如何过滤掉这个提示信息呢?
例如,telnet命令退出时会默认提示“Connection closed by foreign host.”
例如,执行mysql -uroot -pPassword命令,会默认提示"mysql: [Warning] Using a password on the command line interface can be insecure."
二、解决方法:
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 2>&1 > /tmp/test
# 终端无任何输出
>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