【发布时间】:2020-01-30 21:03:50
【问题描述】:
可能重复
你好,
我正在为 bash for 循环中的输出重定向而苦苦挣扎。我有几个类似的 bash 脚本,每个脚本都在不同的输入文件上启动。脚本调用了一个带有一些参数的工具。
bash 脚本是这样的:
my_tool --input input_file --arg1 arg1_name --arg2 arg2_name > output_dir/result_X.dat
X 是每个脚本唯一的字符串。
我在 for 循环中运行所有这些:
for script in scripts_dir/*.sh
do
bash $script
done
但是,每次运行的标准输出仍然显示在终端上。指定的输出文件已创建,但为空。我该如何解决?我在 stackoverflow 上发现了其他问题,答案是在一个大输出文件中重定向整个循环,但我想避免这种情况。
如果我将 > output_dir/result_X.dat 替换为 > /dev/null :标准输出显示在终端上
如果我将 > output_dir/result_X.dat 替换为 ` 2> /dev/null :什么都不会显示。
提前致谢。
【问题讨论】:
-
您确定程序没有写入标准错误?
-
什么是
an_identifier_defined_in_the_script.dat? shell 会在脚本执行之前解析该行,因此如果您尝试在脚本中定义输出文件的名称,这将不起作用。 -
@WilliamPursell 它只是一个 ID 字符串。该脚本包含另一个工具的命令行,每次运行时字符串都会更改(但每次运行都有不同的 bash 文件,因此 ID 字符串已经写入)
-
@Amessihel 我只尝试了一个文件:终端上没有显示任何内容,但输出文件仍然是空的:/
-
是的,这是因为您的程序输出到标准错误!我想我们以前说过这个?
2>&1says 将标准错误重定向到标准输出。你同样可以把2>output/result_X.dat