如何解决如何使用set命令将输出重定向到另一个文件
重击:
我想知道如何使用set
命令将输出重定向到另一个文件。
例如,我想使用set命令将输出重定向到名为“输出”的文件,我该怎么做?
我尝试使用set -h output
,但似乎没有用。任何帮助表示赞赏。
解决方法
set
command不可用于重定向输出。也许您在考虑redirections。
例如,如果您要将echo 'hi!'
的输出重定向到文件,则可以运行echo 'hi!' > output
。
set
命令允许您设置或取消设置shell选项和位置参数的值,它不是将输出重定向到文件的正确选择。要将命令的输出写入文件,有多种方法,下面列出了一些常用的方法:
command > output.log
标准输出流将仅重定向到文件,它 在终端中不可见。如果文件已经存在 被覆盖。
command >> output.log
标准输出流将仅重定向到文件,它 在终端中不可见。如果文件已经存在,则 新数据将附加到文件末尾。
command 2> output.log
标准错误流将仅重定向到文件,它将 在终端中不可见。如果文件已经存在,它将得到 覆盖。
command 2>> output.log
标准错误流将仅重定向到文件,它将 在终端中不可见。如果文件已经存在,则新 数据将附加到文件末尾。
command &> output.log
标准输出和标准错误流都将被重定向 仅对文件而言,在终端中将看不到任何内容。如果文件 已经存在,它将被覆盖。
command &>> output.log
标准输出和标准错误流都将被重定向 仅对文件而言,在终端中将看不到任何内容。如果文件 已经存在,新数据将附加到文件末尾。
command | tee output.log
标准输出流将被复制到文件,它将仍然 在终端中可见。如果文件已经存在,它将得到 覆盖。
command | tee -a output.log
标准输出流将被复制到文件,它将仍然 在终端中可见。如果文件已经存在,则新数据 将被附加到文件末尾。
command |& tee output.log
标准输出和标准错误流都将被复制到 该文件,同时仍在终端中可见。如果文件 已经存在,它将被覆盖。
command |& tee -a output.log
标准输出和标准错误流都将被复制到 该文件,同时仍在终端中可见。如果文件 已经存在,新数据将附加到文件末尾。
command 2>&1 | tee output.log
,标准输出和标准错误流都将被重定向 到文件。
您可能会想到exec
#!/usr/bin/env bash
echo "script starting"
# make a backup of fd1 (stdout) as fd3,then redirect fd1 to an output file
exec 3>&1 1>/tmp/output.file
# your script here
echo "hello world"
echo "...and so on..."
# turn off logging
exec 1>&3 3>&-
echo done
运行如下:
$ bash script.sh
script starting
done
$ cat /tmp/output.file
hello world
...and so on...
您可以使用以下方法,使用进程替代来将输出记录到终端和输出文件的所有日志中:
exec 3>&1 1> >(tee /tmp/output.file)
和其他花哨的东西,例如在输出中添加时间戳
exec 3>&1 1> >(ts | tee /tmp/output.file)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。