Как обрабатывать ВСЕ сообщения об ошибках, даже если команда не работает? - PullRequest
0 голосов
/ 10 июня 2019

Я немного заржавел в сценариях bash. Я создал следующий скрипт:

#!/bin/bash

display_usage() {
        echo -e "\nUsage: This script must be run with both a valid source and a target client name."
        echo -e "Example: ./createClientRolesRespChart <source client name> <target client name>\n"
        }

mv $1 $2

# If less than two arguments supplied, display usage
if [  $# -le 1 ]; then
        display_usage
        exit 1
fi

if [ $? -eq 0 ]; then
   echo "Created new response chart for the $2 client."
   exit 0
else
    echo "[Error] Move (mv) command failed. Please check parameters are correct."
    exit 1
fi

Сценарий работает, НО, если я введу неправильное имя файла, команда не выполнится, однако она все равно печатает сообщение об успехе. Любые намеки. Должно быть легко. Я просто забываю: (

bash-3.2$ ./createClientRolesRespChart foo bar
mv: rename foo to bar: No such file or directory
Created new response chart for the bar client.

1 Ответ

3 голосов
/ 10 июня 2019

$? только говорит, была ли последняя команда выполнена успешно.В вашем случае вы выполняете mv, что дает сбой, затем просматриваете счетчик аргументов, затем просматриваете $?, который теперь будет содержать результат проверки количества аргументов, а не mv,Чтобы исправить это, переключите проверку количества аргументов и mv.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...