我有一个 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
希望它能节省您的时间!