簡體   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