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

Bash command output not saving to text file or variable

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

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

1
ssh git@bitbucket.org > temp.txt

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

1
ls -l > temp.txt

该输出保存到文件。 什么可能导致这种行为上的差异? 我最终将输出保存到变量,但也看到了类似的行为。 我在Ubuntu 16.04 bash版本4.3.48(1)。


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

更多信息:

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

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


试试这个:

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

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