微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用set命令将输出重定向到另一个文件

如何解决如何使用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 举报,一经查实,本站将立刻删除。