Bash命令输出无法保存到文本文件或变量中。

7

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

ssh git@bitbucket.org > temp.txt

我希望能够将权限是否被拒绝的字符串消息保存到temp.txt文件中进行翻译。但输出直接显示在终端上,没有保存到文件中。如果我执行以下操作:

ls -l > temp.txt

输出被保存到文件。是什么原因导致这种行为差异?我最终会将输出保存到变量中,但对于该情况也看到了类似的行为。我使用Ubuntu 16.04 bash版本4.3.48(1)。


1
由于“permission denied”通常被认为是一个错误,所以输出会被路由到stderr而不是stdout吗?如果是这样,您需要使用2> temp.txt> temp.txt 2>&1 - 0x5453
@0x5453 我认为你是对的,那就是我需要做的事情,实际上这在我发布的链接中已经有了,只是我不理解那个语法的含义。另外,在另一台机器上它是可以工作的,所以似乎与系统有关。你能写成答案吗?我会标记为接受的答案。 - adamconkey
2个回答

5
由于“permission denied”通常被视为一种错误,因此是否将输出路由到stderr而不是stdout?如果是这样,您需要使用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将标准错误输出(2)重定向到标准输出(&1),然后将标准输出重定向到文件“temp.txt”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接