Bash命令输出未保存到文本文件或变量[重复]

Posted

技术标签:

【中文标题】Bash命令输出未保存到文本文件或变量[重复]【英文标题】:Bash command output not saving to text file or variable [duplicate] 【发布时间】:2018-08-16 02:44:57 【问题描述】:

我在尝试存储 SSH 检查的输出以查看我是否具有对帐户的 SSH 访问权限时看到了奇怪的行为。我尝试了以下方法:

ssh git@bitbucket.org > temp.txt

我希望有一个字符串消息告诉我权限是否被拒绝或不保存到temp.txt。但是输出直接到终端并且没有保存到文件中。但是,如果我这样做了

ls -l > temp.txt

该输出被保存到文件中。什么可能导致这种行为差异?我最终将成为saving the output to a variable,但在这种情况下也会看到类似的行为。我使用的是 Ubuntu 16.04 bash 版本 4.3.48(1)。

【问题讨论】:

由于“权限被拒绝”通常被认为是一个错误,输出是否被路由到标准错误而不是标准输出?如果是这样,您需要使用2> temp.txt> temp.txt 2>&1 @0x5453 我认为你是对的,这就是我需要做的,事实上,在我发布的链接中,我只是不明白该语法的含义。它也在另一台机器上工作,所以它似乎依赖于系统。你能写成答案吗?我会标记为已接受。 【参考方案1】:

由于“权限被拒绝”通常被认为是错误,输出是否被路由到标准错误而不是标准输出?如果是这样,您需要使用2> temp.txt> temp.txt 2>&1

更多信息:

在许多系统上,程序输出被分解为多个流,最常见的是stdout(标准输出)和stderr(标准错误)。当你使用>时,只会重定向stdout,但2>可以用来重定向stderr。 (如果您希望正常输出和错误转到两个不同的文件,这很有用。)

语法2>&1 表示“获取stderr 上的所有输出并将其重定向到stdout”,因此您的文件将包含来自两个流的输出。

【讨论】:

【参考方案2】:

试试这个:

ssh git@bitbucket.org > temp.txt 2>&1

基本上这是告诉 linux 将 stderr (2) 重定向到 stdout (&1),然后将 stdout 重定向到您的文件“temp.txt”

【讨论】:

以上是关于Bash命令输出未保存到文本文件或变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将数据变量从 matlab 保存到 csv 或文本文件

Bash的常见特性及文本查看命令实战

Bash脚本:如何在Linux Shell上输出和格式化文本

其他文本处理命令以及bash变量中的一些字符串的处理方法

如何使用 sed 或 awk 命令用变量(变量保存 Unix 脚本)查找和替换文本

sed命令