[问题]如何把调用程序的输出赋给一个变量

sh/bash/dash/ksh/zsh等Shell脚本
回复
caike
帖子: 30
注册时间: 2005-12-09 16:22
送出感谢: 0
接收感谢: 0

[问题]如何把调用程序的输出赋给一个变量

#1

帖子 caike » 2008-01-25 20:23

请教一下高手:

有假如有100个C语言写的test.c程序, 编译存在于目录../versions/v1/test.exe到/versions/v101/test.exe ,
每个程序里有 fprintf(stdout, "%d\n", test()); 输出一个结果.
每个程序需要运行两次, 用不同的输入, 然后分别比较每个版本两次的输出结果是否相同.

我现在的做法如下:

代码: 全选

for((i=1; i<=100; i++))
do
echo "<<<<<Teting the version v$i"

../versions/v$i/test.exe a
../versions/v$i/test.exe b

echo
done
保存到test.sh里, 用 test.sh > result
但这样要自己用眼睛看每个版本的两次结果是否相同, 能不能把../versions/v$i/test.exe a得到的结果存为一个变量,../versions/v$i/test.exe b结果存为另一个变量, 然后直接比较这两个变量值, 相同就路过, 只输出不同结果的版本号?

多谢各位.
上次由 caike 在 2008-01-25 20:51,总共编辑 1 次。
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#2

帖子 BigSnake.NET » 2008-01-25 20:45

评测机?..

代码: 全选

for((i=1; i<=100; i++))
do
echo "<<<<<Teting the version v$i"
diff <(../versions/v$i/test.exe a) <(../versions/v$i/test.exe b) >/dev/null || echo "Output is different when testing the version v$i"
done
上次由 BigSnake.NET 在 2008-01-25 21:00,总共编辑 1 次。
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15
送出感谢: 0
接收感谢: 0

#3

帖子 iblicf » 2008-01-25 20:55

bravo , 球猫 :)
caike
帖子: 30
注册时间: 2005-12-09 16:22
送出感谢: 0
接收感谢: 0

#4

帖子 caike » 2008-01-25 21:00

多谢楼上的指导, 试了一下, 结果我的cygwin没装diff, 明天再试.
java程序员 linux菜鸟 C++初学者
http://ke-cai.net
caike
帖子: 30
注册时间: 2005-12-09 16:22
送出感谢: 0
接收感谢: 0

#5

帖子 caike » 2008-01-26 11:51

代码: 全选

for((i=1; i<=100; i++))
do
echo "<<<<<Teting the version v$i"
../versions/v$i/test.exe a > temp1
 ../versions/v$i/test.exe b>temp2

diff temp1 temp2 >/dev/null || echo "Output is different when testing the version v$i"
done
果然搞定, 能不能解释一下:
diff temp1 temp2 >/dev/null || echo "Output is different when testing the version v$i"
重定向到>/dev/null是哪里? 后面的 echo "Output is different when testing the version v$i"只有当diff结果不同的时候才能输出吗?

再问一个比较低级的问题, 我还想在结果不同的时候顺便把这两个结果, temp1, temp2也输出来. 我怎么echo他们都不出来:(

代码: 全选

diff temp1 temp2 >/dev/null || echo "Output is different when testing the version v$i $temp1 $temp2"

代码: 全选

diff temp1 temp2 >/dev/null || echo "Output is different when testing the version v$i"||echo temp1||echo temp2
也不干活

:(
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#6

帖子 BigSnake.NET » 2008-01-26 12:21

caike 写了:

代码: 全选

for((i=1; i<=100; i++))
do
echo "<<<<<Teting the version v$i"
../versions/v$i/test.exe a > temp1
 ../versions/v$i/test.exe b>temp2

diff temp1 temp2 >/dev/null || echo "Output is different when testing the version v$i"
done
果然搞定, 能不能解释一下:
diff temp1 temp2 >/dev/null || echo "Output is different when testing the version v$i"
重定向到>/dev/null是哪里? 后面的 echo "Output is different when testing the version v$i"只有当diff结果不同的时候才能输出吗?

再问一个比较低级的问题, 我还想在结果不同的时候顺便把这两个结果, temp1, temp2也输出来. 我怎么echo他们都不出来:(

代码: 全选

diff temp1 temp2 >/dev/null || echo "Output is different when testing the version v$i $temp1 $temp2"

代码: 全选

diff temp1 temp2 >/dev/null || echo "Output is different when testing the version v$i"||echo temp1||echo temp2
也不干活

:(
去掉 >/dev/null 就可以
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
回复

回到 “Shell脚本”