输出重定向导致空文件

输出重定向导致空文件

我有一个 shell 脚本,我最好不要编辑它,但我必须使用它的输出。在 shell 上显示./SomeScript.sh -d我需要的输出。

但是,如果我尝试重定向输出,我会得到一个空文件。

./SomeScript.sh -d > temp 
cat temp

检查后为什么重定向输出有时会产生空文件?,我也尝试过,echo $(./SomeScript.sh -d)但该命令什么也没打印。

最初,我尝试grep从输出中获取一行,但在意识到没有返回任何内容后,我尝试将输出重定向到文件,并意识到这个问题。知道为什么会发生这种情况吗?

答案1

如果./SomeScript.sh -d > temp结果是一个空文件(但您可以在屏幕上看到输出),则意味着程序可能正在打印到 stderr 而不是 stout。所以,也尝试重定向它的 stderr —— 即,使用这个:

./SomeScript.sh -d >temp 2>&1

或者您可以将输出发送到两个单独的文件:

./myScript  1>outtemp 2>errtemp 

答案2

使用

./SomeScript.sh -d >> temp

这将附加脚本的每一行,而不是逐行写入和覆盖。

编辑:尝试一下

./SomeScript.sh -d &>> temp

如果你想重定向 stderr 以及 stdout。

答案3

script -c "./SomeScript.sh -flags" temp

这个命令对我有用,但我也不太清楚为什么。

答案4

我遇到了同样的问题并寻求此解决方法:

./SomeScript.sh -d | tee temp.txt

希望它能节省您的时间!

相关内容