繁体   English   中英

如何从sh脚本将`wget`的返回值转换为`int`变量

[英]How can I get the return value of `wget` from a sh script into an `int` variable

操作系统:Linux raspberrypi 4.19.58-v7l +#1245 SMP Fri Jul 12 17:31:45 BST 2019 armv7l GNU / Linux开发板:Raspberry Pi 4

我有一个脚本:

#!/bin/bash

line=$(head -n 1 /var/www/html/configuration.txt)
file=/var/www/html/4panel/url_response.txt
if [ -f "$file" ]; then
    wget_output=$(wget -q -i "$line" -O $file --timeout=2)
    echo "$?"
else
    echo > $file
    chown pi:pi $file 
fi

我从C ++程序使用以下命令调用:

int val_system = 0;
val_system = system("/var/www/html/4panel/get_page.sh");
std::cout<<"System return value: "<<val_system<<std::endl;

如果脚本有问题,请echo "$?" 将输出wget的返回值,但val_system始终为0。

system()是否返回echo "$?"的值echo "$?" 在这种情况下,0是正确的。 如果是这种情况,如何将wget的返回值放在val_system

我遇到了echo "$?" 总是返回8,基本上我输入的网址不正确,并且:

  • 我尝试删除echo "$?" 但是val_system仍然返回0;
  • echo "$?" 删除我将wget行更改为wget -q -i "$line" -O $file --timeout=2并且val_system现在返回2048。

我的尝试都没有结果,我来这里寻求指导。 如何使val_system / system()返回什么echo "$?" 回报?

如何从脚本中获取wget的返回值到调用脚本的C ++程序内部的int变量中?

返回的整数值system()包含有关已执行命令的状态以及其退出代码的其他信息,请参见system()Status Information 您需要使用WEXITSTATUS宏提取退出代码,例如:

std::cout << "System return value: " << WEXITSTATUS(val_system) << std::endl;

如果要回显状态返回状态,则需要保存$?的值$? 变量,然后显式退出。

wget_output=$(wget -q -i "$line" -O $file --timeout=2)
status=$?
...
echo $status
...
exit $status

如果您不需要在对wget的调用与脚本结尾之间执行echo或任何其他命令,则可以依靠隐式退出具有最后一个状态(即与`wget调用相对应的状态)的脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM