我有bash脚本,我问用户一些输入,然后我想调用一个C程序几次,并总结返回值.请注意我的C程序中的main函数printf也有一些语句,它返回一个整数值.这是我的bash脚本的一部分:
#!/bin/bash
encBER=0
// Some other code where I read the values from the user
for i in $frames;
do
tempEncBER=$(./enc_ber $bytes $snr $modulation $channel $alamouti)
encBER=$((encBER + tempEncBER))
done
echo "Total BER is:" $encBER
Run Code Online (Sandbox Code Playgroud)
关键是我要求它执行10次,这意味着frames变量的值为10,但它执行一次,它显示一些语法错误,然后再次执行,对于最终结果,值为encBER0.根本不存储任何东西.如何在我的C程序中的main函数中获取return语句的值并在bash中使用它?
程序的返回值存储在$?变量中.所以你只需要添加每个$?:
for i in $frames;
do
./enc_ber $bytes $snr $modulation $channel $alamouti
encBER=$((encBER + $?))
done
Run Code Online (Sandbox Code Playgroud)
请注意,该值限制为8位,因此最大值为255.
例如,如果要捕获大于255的整数或浮点数,请使用stderr表示您不想要的所有内容(fprintf(stderr, "Things I don't want\n");)和stdout以打印要捕获的返回值.
程序的输出与其返回码不同。返回码一般应为0,表示成功,非0,表示失败。如果您想要返回代码,那么您可以简单地运行程序并$?随后检查变量:
./enc_ber $bytes $snr $modulation $channel $alamouti
retVal=$?
# retVal now contains the value passed back from the exit of your program.
Run Code Online (Sandbox Code Playgroud)
请注意,在运行程序和检查结果之间不要执行任何操作,否则 的值$?将再次更改。
另一方面,如果您希望程序向 stdout 写入一个值,并且这就是您需要获取的输出,那么您必须将输出重定向到文件,然后读取文件的内容:
./enc_ber $bytes $snr $modulation $channel $alamouti >./my_file.txt
output=$( cat my_file.txt )
# output now contains whatever enc_ber wrote to stdio
Run Code Online (Sandbox Code Playgroud)
当然,您的程序只需编写您希望捕获的内容。日志行和其他额外的格式会给您带来问题。上面是一个简单的示例 - 由您来解析程序输出的任何内容,但上面应该适用于简单的数字输出。
| 归档时间: |
|
| 查看次数: |
3076 次 |
| 最近记录: |