Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?  (Прочитано 1010 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
 Часто вижу в скриптах такие вот переменные

SUCCESS=0
E_NOARGS=65

откуда берутся эти значения
для чего эти переменные - их назначение

Искал информацию, но находил их использование только в примерах

Возможно SUCCESS - используют для сравнения с кодом завершения скрипта, используя сравнение с переменной $?,
а E_NOARGS - для чего ???
 Расскажите если кто знает про них ...

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #1 : 29 Апрель 2017, 15:27:13 »
Это код завершения скрипта в случае SUCCESS и E_NOARGS (нет аргументов скрипта)
« Последнее редактирование: 29 Апрель 2017, 15:30:37 от renzrv »

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #2 : 02 Май 2017, 12:57:51 »
Вот скрипт который я разбирал

(Нажмите, чтобы показать/скрыть)

C переменной SUCCESS=0 - так обстоят дела.
 Как понимаю назвать ее могу как хочу и не обязательно заглавными буквами, так ?
 Код завершения выдаваемый переменной $? - (проверка exit-статуса) - может быть 0 или 1, в зависимости, что вы хотите , чтобы при проверке, последнего статуса выполнения команды ( успешного или нет) выполнились какие-то определенные команды , так ?

  Например в задаче выше проверяется, если код завершения, выдаваемый переменной $? = 0, значит условие соблюдено и выполняется блок определенных команд, иначе выйдет сообщение о невозможности установки...

Но вот переменная  E_NOARGS=65 - вызывает вопросы...
 
Почему называется E_NOARGS, а не как то по другому, это что , данное имя зарезервировано в языке Bash или системой ???

Почему значение E_NOARGS=65 , а почему не 100, или 137 ???

И почему нужно указывать вот так

Код: Bash
  1. exit $E_NOARGS

что это за синтаксис, подскажите пожайлуста ???


Онлайн Pilot6

  • Старожил
  • *
  • Сообщений: 13508
  • Xubuntu 18.04
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #3 : 02 Май 2017, 13:10:54 »
Почему называется E_NOARGS, а не как то по другому, это что , данное имя зарезервировано в языке Bash или системой
Автор скрипта так назвал. Можно догадатся, что от слов "Error No Arguments".
Цитировать
Почему значение E_NOARGS=65 , а почему не 100, или 137
Аналогично.
И почему нужно указывать вот так

Код: Bash

    exit $E_NOARGS


что это за синтаксис, подскажите пожайлуста
Скрипт на выходе выдает значение этой переменной.

В целом вопросы не вполне понятны. Что смущает?
Я в личке не консультирую. Вопросы задавайте на форуме.

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #4 : 02 Май 2017, 13:18:13 »
Скрипт на выходе выдает значение этой переменной.

И в данном случае - это зачем, какую полезную функцию это несет ???

Почему нельзя написать просто exit и все ...
В целом вопросы не вполне понятны. Что смущает?

Разбираю пример сценария, чтобы понять логику его работы, а про эти переменные ничего не могу найти, естественно полной картины нет, а значит нет полного понимания работы сценария.

Я под спойлером в конце этого сценария расписал логику его работы, за исключением моментов связанных с переменной $E_NOARGS

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #5 : 02 Май 2017, 14:16:28 »
И в данном случае - это зачем, какую полезную функцию это несет
exit $CODEЗавершет скрипт с кодом из переменной $CODE
По коду завершения скрипта можно определить результат его работы или ошибку.

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #6 : 02 Май 2017, 15:06:20 »
Цитировать
Когда работа сценария завершается командой exit без параметров, то код возврата сценария определяется кодом возврата последней исполненной командой.

Код возврата последней команды хранится в специальной переменной $?.

...

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

То есть использование переменной E_NOARGS=65 в команде

Код: Bash
  1. exit $E_NOARGS

переопределяет значение переменной $? (в нее теперь записано значение exit-статуса = 65) - в этой точке работы скрипта, и затем его можно как-то обработать, например следом записав условие проверки ???



Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #7 : 02 Май 2017, 18:56:25 »
переопределяет значение переменной $?
В текущем скрипте уже ничего не переопределяется, и не обрабатывается т.к. скрипт сразу завершается с указанным кодом, а вот в родительском процессе bash/sh из которого был запущен скрипт, в переменной $? сохраняется код завершения скрипта которое можно использовать для условий/проверок.

Пользователь добавил сообщение 02 Май 2017, 19:08:34:
Что тебе мешает свои догадки/непонятки по мере изучения самому проверять на тестовых скриптах?
« Последнее редактирование: 02 Май 2017, 19:08:34 от renzrv »

Оффлайн xuser73

  • Активист
  • *
  • Сообщений: 579
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #8 : 02 Май 2017, 19:21:35 »
Почему значение E_NOARGS=65 , а почему не 100, или 137
Могло быть и 100 или 137, но значение 65 назначил разработчик. Скорее всего, этот скрипт вызывался изначально другим скриптом или просто разработчик этого скрипта сам смотрел что вернет этот скрипт. Так или иначе, по возвращаемому значению оценивалась как отработал скрипт.
Настоящему коту всегда март.

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #9 : 04 Май 2017, 14:05:49 »
этот скрипт вызывался изначально другим скриптом или просто разработчик этого скрипта сам смотрел что вернет этот скрипт. Так или иначе, по возвращаемому значению оценивалась как отработал скрипт.

Я попробовал воссоздать условие..

1- скрипт redireckt-test.sh

(Нажмите, чтобы показать/скрыть)

2-й скрипт check-exit-status.sh

(Нажмите, чтобы показать/скрыть)


Вызываю один скрипт из другого, но не вижу кода exit-статуса, который должен передать 1-й скрипт.

В первом скрипте если отработал 1-й блок команд, то скрипт возвращает $?==65, согласно команде в сценарии
Цитировать
exit $E_NOARGS
- но почему-то это не происходит ?

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6015
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #10 : 04 Май 2017, 21:45:11 »
Вызываю один скрипт из другого
Не вызываете, а выполняете код 1-го скрипта во 2-м. Попробуйте уяснить разницу между source и непосредственным вызовом
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #11 : 05 Май 2017, 00:37:17 »
Вместо
Код: Bash
  1. . ./redireckt-test.sh $path
нужно
Код: Bash
  1. /путь/redireckt-test.sh $path
или
Код: Bash
  1. bash /путь/redireckt-test.sh $path

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #12 : 05 Май 2017, 11:49:06 »
Попробуйте уяснить разницу между source и непосредственным вызовом

Подскажите пару статей, начал искать но не могу понять, как формировать запрос в поисковик...

Пользователь добавил сообщение 05 Май 2017, 12:04:05:


Вот я указал полный путь
(Нажмите, чтобы показать/скрыть)

Но не получаю статуса выполнения вызываемого скрипта.

И в чем же разница вызова скрипта из другого скрипта и выполнение скрипта из другого скрипта ???
 Можно просто ссылку на статью с примерами, касательного этого момента..
Спасибо...

Пользователь добавил сообщение 05 Май 2017, 12:07:22:
И почему же нужно полный путь указывать если нужные файлы запускаются из одной директории ?
« Последнее редактирование: 05 Май 2017, 12:07:22 от alex-sky »

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #13 : 05 Май 2017, 12:32:33 »
Но не получаю статуса выполнения вызываемого скрипта.
Ты где-то ошибся. При запуске сообщений в терминал никаких не пишет?

И в чем же разница
source это выполнение кода из другого файла как продолжение (часть) текущего скрипта, а просто вызов любого скрипта работатет как вызов команды (может читать STDIN, пишет в STDOUT, принимает аргументы, наследует переменные окружения, возвращает Exit Code).

Пользователь добавил сообщение 05 Май 2017, 12:34:47:
И почему же нужно полный путь указывать
Не нужно, это для проверки.
« Последнее редактирование: 05 Май 2017, 12:34:47 от renzrv »

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
Re: Переменные SUCCESS=0 ; E_NOARGS=65 - что это ?
« Ответ #14 : 05 Май 2017, 13:00:46 »
(может читать STDIN, пишет в STDOUT, принимает аргументы, наследует переменные окружения, возвращает Exit Code).

Это то мне и надо, чтоб проверить, что возвращает вызываемый скрипт

Ты где-то ошибся. При запуске сообщений в терминал никаких не пишет?

Вот запускаю

Код: Bash
  1.  ./check-exit-status.sh

(Нажмите, чтобы показать/скрыть)

 

Страница сгенерирована за 0.235 секунд. Запросов: 22.