【发布时间】:2020-01-18 03:13:47
【问题描述】:
操作系统:Linux raspberrypi 4.19.58-v7l+ #1245 SMP Fri Jul 12 17:31:45 BST 2019 armv7l GNU/Linux 板子:树莓派 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 是正确的。如果是这种情况,我该如何将wget 的返回值放在val_system 中?
我遇到了echo "$?"总是返回8的情况,基本上我输入了一个错误的URL并且:
- 我已尝试删除
echo "$?",但val_system仍返回0; - 删除
echo "$?"后,我将wget行更改为wget -q -i "$line" -O $file --timeout=2,val_system现在返回2048。
我的尝试都没有结果,我来这里寻求指导。如何让 val_system / system() 返回 echo "$?" 返回的内容?
如何从脚本中获取 wget 的返回值到调用脚本的 C++ 程序中的 int 变量中?
【问题讨论】:
-
你用macos吗?
-
我在
macos和freebsd上测试了相同的结果,是的,这是新的,看到返回值是 256 的倍数。所以我看到的是当我执行exit 1时,它返回 256 ,当exit 2时,返回512,以此类推。检查上面链接中的答案之一,它解释了原因。 -
伟大的收获!也许你是对的。我得到 2048 作为退出状态,这意味着 256*8。而 8 是
wget的“真实”退出状态。我会更多地测试它。我认为您可以根据此制定答案。 -
是的。这是对的 !我尝试了不同的退出状态,它们都是 256 的倍数。