linux重定向文件在哪里,关于linux:将所有输出重定向到文件

本问题已经有最佳答案,请猛点这里访问。

我知道在Linux中,为了将输出从屏幕重定向到文件,我可以使用>或tee。但是,我不知道为什么输出的一部分仍然输出到屏幕,而不是写入文件。

是否有方法将所有输出重定向到文件?

该部分写入stderr,使用2>重定向它。例如:

foo > stdout.txt 2> stderr.txt

或者如果您希望在同一个文件中:

foo > allout.txt 2>&1

注意:这在(ba)sh中有效,请检查shell的语法是否正确。

嗯,我找到了推荐信,并删除了我的帖子,因为我有错误的信息。从bash手册:"ls 2>&1>dirlist"仅将标准输出定向到dirlist,因为在将标准输出重定向到dirlist之前,标准错误已从标准输出中复制":)

另外,从bash man"有两种用于重定向标准输出和标准错误的格式:两种格式中的word和word,第一种是首选的。这在语义上相当于>单词2>&1"

有趣的是,当我设置为top > stdout.txt 2> stderr.txt时,它将在stdout.txt上输出,但如果与foo > stdout.txt 2> stderr.txt类似,它只会在stderr.txt上输出,而不是在stdout.txt上输出(空白文件)。

两个重要的附录:如果你想同时使用stdout和stderr,你必须按照文件的工作顺序相反的顺序编写重定向,cmd1 2>&1 | cmd2;把2>&1放在|之后,会改为cmd2重定向stderr。如果stdout和stderr都被重定向,程序仍然可以通过打开/dev/tty来访问终端(如果有的话);这通常只在密码提示(如ssh时进行)。如果你也需要重新定向,那么shell不能帮助你,但是expect可以。

将>改为>>追加而不是覆盖。有点明显,但值得一提。

如果程序发送错误,则此操作不起作用。当您希望将该输出写入日志文件时,应该怎么做??

@灰尘的区别是,foo >> allout.txt 2>>&1还是foo >> allout.txt 2>&1?

@这真的很容易自己测试,但我会继续说使用2>&1。

@dustingriffith,是的,只是使用2>&1确实有效;我试过了。

我们能以某种方式限制stdout和stderr的文件大小吗?我不想为此把监工记录在案。如果可能的话那就太好了。

&1sufix意味着输出将是命令的第一个参数,在这种情况下,allout.txt是命令的第一个参数。

记住,在命令执行之前,>将创建/清空目标文件。如果您想修改文件内容,这是一个问题。cat longlisting.txt | sort > longlisting.txt将导致一个空文件。在这种情况下,最好使用| tee,而不是>。

所有POSIX操作系统都有3个流:stdin、stdout和stderr。stdin是输入,它可以接受stdout或stderr。stdout是主输出,使用>、>>或|重定向。stderr是错误输出,它是单独处理的,这样任何异常都不会传递给命令或写入可能中断的文件;通常,这会发送到某种类型的日志,或者直接转储,即使stdout被重定向。要将两者重定向到同一位置,请使用:

command &> /some/filestrike>

编辑:感谢扎克指出上述解决方案不可移植--请改用:

*command* > file 2>&1

如果要消除错误,请执行以下操作:

*command* 2> /dev/null

看起来&>和2>&!都做同样的事?

&> file(aka >& file不是官方posix shell规范的一部分,而是作为一个方便的扩展添加到许多bourne shell中(它最初来自csh)。在可移植shell脚本中(如果不需要可移植性,为什么要编写shell脚本?),仅使用> file 2>&1。

&>不是在sh中实现的,因此要注意从cron文件执行的命令,crontab使用sh来运行命令,除非您告诉它使用另一个shell。

例如,在控制台和文件file.txt中获取输出。

make 2>&1 | tee file.txt

注:&(在2>&1中)规定1不是文件名,而是文件描述符。

顺便说一下,tee-a file.txt意味着附加到一个文件。

用这个-"require command here"> log_file_name 2>&1。

Unix/Linux中重定向操作符的详细描述。

>运算符通常将输出重定向到文件,但可以重定向到设备。还可以使用>>追加。

如果不指定数字,则假定为标准输出流,但也可以重定向错误。

> file redirects stdout to file

1> file redirects stdout to file

2> file redirects stderr to file

&> file redirects stdout and stderr to file

/dev/null是一个空设备,它接受您想要的任何输入并丢弃它。它可以用来抑制任何输出。

Unix/Linux中的重定向操作符?哪个炮弹?

这将在Unix和Linux中都能工作,并且与我们使用的shell无关。

Osexp2003和J.A.的学分

而不是

&>> your_file.log

排在队伍后面

crontab -e

我用

#!/bin/bash

exec &>> your_file.log

在bash脚本的开头。

优点:脚本中有日志定义。有利于Git等。

正是我想要的,谢谢!在我的例子中,我没有直接执行脚本(一些我不控制的包装脚本正在调用它),因此我不能在命令后指定输入重定向

我很乐意支持你。顺便说一下,我要注意的是,我不使用的示例(crontab)甚至不起作用,因为crontab使用sh而不是bash。为了更进一步,其他的答案会有所帮助。如果你不知道,&>> /dev/null只适用于bash,并将标准输出(1)和标准错误(2)都重定向到nirvana(3是标准输入)。在这种特定的情况下,覆盖(&>或附加(&>>没有区别)。

命令:

foo >> output.txt 2>&1

附加到output.txt文件,而不替换内容。

它在r,Ubuntu14脚本的crontab中为我工作。

这可能是标准错误。您可以重定向它:

... > out.txt 2>&1

以后可以使用exec命令重定向任何命令的所有stdout/stderr输出。

样本脚本:

exec 2> your_file2 > your_file1

your other commands.....

用>>附加:

command >> file

这与原始问题有关,但没有回答。

不回答,但通常被误解,第一个答案实际上表明>和>和可以互换。这不值得你投反对票。

在LinuxMint中,此命令字符串将执行脚本和错误路由到单个TXT文件。埃多克斯1〔13〕。脚本名为setup.sh,输出目标为setup.txt。

这与几年前在这里发布的答案相同,只是不包含解释。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值