我试图重定向一些bash脚本输出。 我想做的是:
getAffectationsFromDataBase() {
this.http.get('http://localhost:8081/affectation/findAll').map((response:Response) => {
this.tasks.tasks = this.transformAffectations(response.json().affectations);
}).subscribe(result => this.isLoading = false);
}
我想将stderr放在一个文件中,并将stderr和stdout放在另一个文件中。
另外我想在all_output.log的末尾添加(对于不重要的error.log)。
但我没有得到正确的语法,我一直在尝试很多事情,而且我无法找到正确的事情。
谢谢你的帮助! :)
答案 0 :(得分:2)
重定向语句(如> foo
或2> bar
或1>&2
)最好像从左到右执行的文件描述符赋值一样读取。您的代码执行此操作:
2> error.log
意味着:fd2 = open_for_writing('error.log')
>> all_output.log
意味着:fd1 = open_for_appending('all_output.log')
2>&1
意味着:fd2 = fd1
通过这个你可以理解第一个语句(2> error.log
)除了创建(空)error.log
之外没有任何效果。
您希望实现重复一个流到两个不同的目标。这不是仅通过重新定向来完成的。为此,您需要一个读取一件事并将其写入两个不同流的过程。使用tee(1)
做得最好。
不幸的是,将流传递给其他进程是通过管道完成的,它们只传递stdout,而不是stderr。要实现目标,首先必须交换stderr和stdout。
完整的结果调用可能如下所示:
(./some_script.sh 3>&2 2>&1 1>&3 | tee error.log) >> all_outputlog 2>&1