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命令输出未保存到文本文件或变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Bash脚本:如何在Linux Shell上输出和格式化文本