Linux系统 shell脚本中可以用STDOUT和STDERR文件描述符以在多个位置生成输出,只要简单地重定向相应的文件描述符就行了。那么具体如何操作呢?有两种方法来在脚本中重定向输出,下面南昌网络公司-百恒网络就来为大家介绍一下:
一、临时重定向
如果有意在脚本中生成错误消息,可以将单独的一行输出重定向到STDERR。你所需要做的是使用输出重定向符来将输出信息重定向到STDERR文件描述符。在重定向到文件描述符时,你必须在文件描述符数字之前加一个&:
echo "This is an error message" >&2
这行会在脚本的STDERR文件描述符所指向的位置显示文本,而不是通常的STDOUT。下面这个例子就利用了这项功能,我们一起来看看。
$ cat test8
#!/bin/bash
# testing STDERR messages
echo "This is an error" >&2
echo "This is normal output"
$
如果像平常一样运行这个脚本,你可能看不出什么区别。
$ ./test8
This is an error
This is normal output
$
记住,默认情况下,Linux会将STDERR导向STDOUT。但是,如果你在运行脚本时重定向了STDERR,脚本中所有导向STDERR的文本都会被重定向。
$ ./test8 2> test9
This is normal output
$ cat test9
This is an error
$
这时通过STDOUT显示的文本显示在了屏幕上,而发送给STDERR的echo语句的文本则被重定向到了输出文件。
这个方法非常适合在脚本中生成错误消息。如果有人用了你的脚本,他们可以像上面的例子中那样轻松地通过STDERR文件描述符重定向错误消息。
二、永久重定向
如果脚本中有大量数据需要重定向,那重定向每个echo语句就会很烦琐。取而代之,你可以用exec命令告诉shell在脚本执行期间重定向某个特定文件描述符。
$ cat test10
#!/bin/bash
# redirecting all output to a file
exec 1>testout
echo "This is a test of redirecting all output"
echo "from a script to another file."
echo "without having to redirect every individual line"
$ ./test10
$ cat testout
This is a test of redirecting all output
from a script to another file. without having to redirect every individual line
$
exec命令会启动一个新shell并将STDOUT文件描述符重定向到文件。脚本中发给STDOUT的所有输出会被重定向到文件。
可以在脚本执行过程中重定向STDOUT。
$ cat test11
#!/bin/bash
# redirecting output to different locations
exec 2>testerror
echo "This is the start of the script"
echo "now redirecting all output to another location"
exec 1>testout
echo "This output should go to the testout file"
echo "but this should go to the testerror file" >&2
$
$ ./test11
This is the start of the script
now redirecting all output to another location
$ cat testout
This output should go to the testout file
$ cat testerror
but this should go to the testerror file
$
这个脚本用exec命令来将发给STDERR的输出重定向到文件testerror。接下来,脚本用 echo语句向STDOUT显示了几行文本。随后再次使用exec命令来将STDOUT重定向到testout文件。注意,尽管STDOUT被重定向了,但你仍然可以将echo语句的输出发给STDERR,在本例中还是重定向到testerror文件。
当你只想将脚本的部分输出重定向到其他位置时(如错误日志),这个特性用起来非常方便。不过这样做的话,会碰到一个问题。 一旦重定向了STDOUT或STDERR,就很难再将它们重定向回原来的位置。如果你需要在重定 向中来回切换的话,有个办法可以用。不过由于时间关系,今天就先不介绍了,我们下次再给大家讲解,敬请关注!
好了,关于在脚本中重定向输出的两个方法,本公司就已经为大家介绍完了,希望能够对大家有所帮助,了解更多相关知识,欢迎访问公司官网。此外,百恒网络专业为您提供APP开发、网站设计、微信开发、网站推广等服务,如有需要,欢迎大家来电咨询,洽谈合作!