Мои команды выхода не работают правильно - PullRequest
0 голосов
/ 04 мая 2018

Я не совсем уверен, правильно ли я использую выходы. Но когда я выполняю код с чем-то, что печатает оператор использования, он должен на этом остановиться. Это должен сделать один или другой. В моем случае это делает оба.

cmd="$1" ## the command to find
if [[ $# -ne 1 ]]
        then
                echo "usage: ./findcmd command"
fi
exit=1

path=$(echo $PATH | tr ":" " ")
for dir in $path
        do
                if [[ -x "$dir/$cmd" && -r "$dir/$cmd" ]]
                        then
                                echo "$dir/$cmd"
                                exit 0
                fi
        done
echo "$cmd not on $PATH"
exit=0

ВЫВОД:

[112] ./findcmd

использование: ./findcmd команда

/ usr / local / bin / ** это не должно быть здесь

[113] ./findcmd ping

/ USR / бен / пинг

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Должно быть exit [n].

Внутри скрипта команда exit nnn может использоваться для доставки nnn статус выхода в оболочку (nnn должен быть целым числом в 0 - 255 диапазон).

И это должно быть внутри блока IF / FOR.

Как это:

cmd="$1" ## the command to find
if [[ $# -ne 1 ]]
    then
        echo "usage: ./findcmd command"
        exit 1
fi

## rest of code to execute if args are correct
0 голосов
/ 04 мая 2018

Вы правильно используете exit, чтобы остановить скрипт после того, как ваш dir / cmd будет напечатан; попробуйте использовать это в другом месте.

Имейте в виду, что ваш первый exit, если он правильный, остановит сценарий перед циклом, независимо от того, было ли напечатано использование.

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