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


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

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

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

Оффлайн alex-sky

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

SUCCESS=0
E_NOARGS=65

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

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

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

Оффлайн ReNzRv

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

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
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) [Выделить]
exit $E_NOARGS
что это за синтаксис, подскажите пожайлуста ???


Оффлайн Pilot6

  • Старожил
  • *
  • Сообщений: 14037
  • 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

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

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

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

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

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

Оффлайн ReNzRv

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

Оффлайн alex-sky

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

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

...

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

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

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



Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
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

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

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
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

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

Оффлайн ReNzRv

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

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
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

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
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

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

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

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

Вот запускаю

Код: (Bash) [Выделить]
./check-exit-status.sh
(Нажмите, чтобы показать/скрыть)

 

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