加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

我应该用什么方法在bash脚本中使用’printf’将错误消息写入’st

发布时间:2020-12-15 19:16:46 所属栏目:安全 来源:网络整理
导读:我想将bash脚本中的printf的输出引导到stderr而不是stdout。 我不是要求从目前路由的任何一个重定向到stderr或stdout。我只是希望能够将输出从printf发送到stderr,而不是默认的stdout。 我尝试了一下,发现将1 2添加到printf,如下面的示例所示,似乎是我想
我想将bash脚本中的printf的输出引导到stderr而不是stdout。

我不是要求从目前路由的任何一个重定向到stderr或stdout。我只是希望能够将输出从printf发送到stderr,而不是默认的stdout。

我尝试了一下,发现将1>& 2添加到printf,如下面的示例所示,似乎是我想做的。但是,我没有使用bash的经验。所以我的主要问题是在bash中是否有更好的方法呢?

通过“更好”我的意思是有另一种方法来做这个更常用,更常规或更习惯的方式吗?一个更有经验的bash程序员会怎么做?

#!/bin/bash
printf "{%s}   This should go to stderr.n" "$(date)" 1>&2 
printf "[(%s)] This should go to stdout.n" "$(date)"

我也有次要的问题。我不是要求它,因为我需要知道,但更多的是因为我只是好奇,想更好地了解发生了什么。

似乎上面的内容只有在shell脚本中运行时才有效。当我从命令行尝试它似乎不起作用。

这是我的意思的一个例子。

irrational@VBx64:~$ printf "{%s} Sent to stderr.n" "$(date)" 1>&2 2> errors.txt
{Sat Jun  9 14:08:46 EDT 2012} Sent to stderr.
irrational@VBx64:~$ ls -l errors.txt
-rw-rw-r-- 1 irrational irrational 0 Jun  9 14:39 errors.txt

我会期望上面的printf命令没有输出,因为输出应该去stderr,反过来应该去一个文件。但这不会发生。咦?

首先,是的,1& 2& 2是正确的事情。

第二,您的1>& 2> errors.txt示例不起作用的原因是因为重定向的确切细节。

1& 2意味着“使文件句柄1指向当前文件句柄2” – 即将已经写入stdout的内容现在转到stderr。 2> errors.txt意味着“打开一个文件句柄到errors.txt并使文件句柄2指向它” – 即将已经写入stderr的内容现在进入errors.txt。但是文件句柄1根本没有受到影响,所以写入stdout的东西仍然是stderr。

正确的做法是2> errors.txt 1>& 2,这将使stderr和stdout的写入都转到errors.txt,因为第一个操作将是“打开errors.txt并使stderr指向” ,第二个操作将“stdout指向stderr现在指向的地方”。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读