Bash命令输出未保存到文本文件或变量

时间:2018-03-07 21:20:37

标签: bash

我在尝试存储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 个答案:

答案 0 :(得分:2)

由于"许可被拒绝"通常被认为是错误,输出是否被路由到stderr而不是stdout?如果是,则需要使用2> temp.txt> temp.txt 2>&1

更多信息:

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

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

答案 1 :(得分:0)

试试这个:

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

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