首页 > 解决方案 > 使用多指令(带有 cicles 和语句)bash 脚本创建 stdout 和 stderr 文件

问题描述

我有一个 bash 脚本,其中包含多个指令,例如循环和语句。

我想创建一个 stdout 和 stderr 文件来打印分析过程中可能发生的错误。

但是,此论坛和其他论坛中的建议无法正常工作:实际上,尽管正确执行了分析,但没有生成文件。

这是我的代码框架:

#!bin/bash

{
start=`date +%s` ;
while IFS=, read -r col1 col2 ;
do
    name="$col1$col2" ; 
done < "/path/to/file.csv" ;
...
for file in ./*txt
do
    operation1
    operation2
done
} > stdout.txt 2stderr.txt

tar -zcf ./folder

我试图用和 (&) 更改分号 (;) 但没有奏效。你们有什么线索吗?

提前致谢。

标签: bashstdoutstderr

解决方案


你很接近,假设你operation1operation2stdoutorstderr取决于每个命令的结果,你想要

#!/bin/bash

{
    commands

} 2>stderr.txt >stdout.txt

tar ... stuff

你重定向到stderrthen to stdout(最好是任何一个顺序都可以)......但重要的部分是2and之间没有空格>

简单的工作示例

#!/bin/bash

{
    [ 1 -eq 1 ] && echo "good int"
    [ a -eq a ] && echo "good char"

} 2>stderr.txt >stdout.txt

结果

$ cat stdout.txt
good int

$ cat stderr.txt
./s.sh: line 5: [: a: integer expression expected

推荐阅读