for((i=1;i<15;i=i+1));
do
mpirun -np $i a.out
done
在a.out
中,有printf
个将一些中等结果输出到屏幕上。如何将它们重定向到名为output.txt
的文件?
答案 0 :(得分:1)
根据我的评论,您有几种选择,可以选择如何将调用mpirun
和a.out
的shell脚本的输出重定向到输出文件。
bash scriptname.sh > output.txt
; mpirun -np $i a.out
命令本身的输出,该命令在您显示的示例中将写入输出文件14次,例如mpirun -np $i a.out >> output.txt
,请注意要附加到文件的>>
重定向(另外,请注意,如果您每次都需要写入一个空文件,则您希望在循环之前截断output.txt
); 2.
,您可以在子shell中执行mpirun
命令,该命令在您的示例中花了很少的钱,但在某些情况下是一种选择和帮助;和output.txt
的最佳方法是使用括号括起来的组允许对产生的整个输出进行一次重定向通过循环,例如{ for ((...)); do ... done } > output.txt
例如,如果您的mpirun ...
命令将输出生成到stdout
(类似于下面的简单示例)
#include <stdio.h>
int main (int argc, char **argv) {
char *s = argc > 1 ? argv[1] : "default";
printf ("%s\n", s);
return 0;
}
(编译为echoarg
)
一个模仿您的循环并使用大括号括起来的组重定向到output.txt
的示例shell脚本可以写为:
#!/bin/bash
exefile="${1:-./bin/echoarg}" ## executable to call
outfile="${2:-output.txt}" ## output file name
:> "$outfile" ## truncate outfile
[ -x "$exefile" ] || {
printf "error: file not executable '%s'\n" "$exefile"
exit 1
}
## braced group encosing for loop redirected to outfile
{
for ((i = 1; i < 15; i++))
do
./bin/echoarg "$i"
done
} > "$outfile"
使用/输出/结果文件示例
$ ./echoarg.sh ./bin/echoarg dat/outfile.txt
和
$ cat dat/outfile.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
仔细检查一下,如果还有其他问题,请告诉我。