首页 > 解决方案 > 如何从 sh 脚本中获取`wget`的返回值到`int`变量中

问题描述

操作系统:Linux raspberrypi 4.19.58-v7l+ #1245 SMP Fri Jul 12 17:31:45 BST 2019 armv7l GNU/Linux Board: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 "$?"?在这种情况下,0 是正确的。如果是这种情况,我该如何输入wgetin的返回值val_system

我遇到了echo "$?"总是返回 8 的情况,基本上我输入了一个不正确的 URL,并且:

我的尝试都没有结果,我来这里寻求指导。我怎样才能制造val_system/system()退货echo "$?"

如何wget将脚本的返回值放入int调用脚本的 C++ 程序内部的变量中?

标签: c++bashshellsystem

解决方案


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

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

推荐阅读