Я разрабатываю скрипт bash. Мне нужно взять выходные данные команды и сохранить их в переменной, и мне нужно знать, была ли эта команда успешной.

Я собирался сделать это (псевдокод):

var = $(myCommand)

if($? = 0){
    doThings    
}else{
    doOtherThings
}

Проблема в том, что $? сохраняет результат выполнения var = $() , а не myCommand .

Проверка вывода myCommand не докажет, что выполнение было успешным.

3 ответа3

3

Проблема в том, что $? сохраняет результат выполнения var = $(), а не myCommand.

ты неправ. $? сохраняет результат myCommand . Простой тест может доказать это, смотрите здесь:

0

Вам нужна переменная, которая хранит ваш $? перед тем, как назначить переменную, вам нужно набрать last_status=$(echo $?) после этого вы можете вспомнить $? с вводом $ last_status вместо $?

Как это;

echo $RANDOM

abc=$?

newVar=$(cat foo)

echo $abc

0

Допустим, ваша команда date +%d-%m-%Y , она печатает текущую дату.

Usage : ./script.sh
cat script.sh

#!/bin/bash
command="date +%d-%m-%Y"
read var < <($command)
if [ $? -eq 0 ]; then
        echo "success"
else
        echo "fail"
        var="$command"
fi
echo $var

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .