Понятно, почему bash-скрипт не выполняет main?

Проблема может заключаться в том, что вы дали разрешение на каталог xyz но не дал разрешения на запись и в / home . Вам нужно будет изменить группу / home на jenkins и дать ей разрешение 775.

Однако самым чистым способом было бы использовать значения по умолчанию для каталогов Jenkins.

1
23.05.2017, 15:40
2 ответа

$ man grep

/ EXIT

EXIT STATUS
   Normally the exit status is 0 if a line is selected, 1 if no lines were
   selected, and 2 if an error occurred.  However, if the -q or --quiet or
   --silent  is  used and a line is selected, the exit status is 0 even if
   an error occurred.

РЕДАКТИРОВАТЬ: надеюсь, это проясняет. Я знаю, что это сюрприз, если вы не искали такого поведения.

Это можно проверить, обратившись к секретному стандарту POSIX (серьезно, они слегка затемняют веб-страницу, надеясь, что больше людей купят печатные версии).

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html#tag_20_55_14

СТАТУС ВЫХОДА

 Должны быть возвращены следующие значения выхода: 
 
0 
Выбрана одна или несколько строк. 
1 
Строки не выбраны. 
> 1 
Произошла ошибка. 
 

пример решения

Хотя и без попытки определить, когда «произошла ошибка»:

if (uname -s | grep -i darwin >/dev/null); then
  IS_DARWIN=1
fi
1
27.01.2020, 23:19

Вы можете просто использовать сопоставление с образцом Bash вот так.

[[ $(uname) = *[Dd]arwin* ]]; IS_DARWIN=$?
[[ $(uname) = *[Ss]un[Oo][Ss]* ]];  IS_SOLARIS=$?

Это расширенный тест, встроенный в Bash. Чтобы сократить количество обращений к uname, сохраните значение в переменной.

uname=$(uname)
[[ $uname = *[Dd]arwin* ]]; IS_DARWIN=$?
[[ $uname = *[Ss]un[Oo][Ss]* ]];  IS_SOLARIS=$?

Это можно упростить следующим образом:

uname=$(uname)
[[ $uname =~ [Dd]arwin ]]; IS_DARWIN=$?
[[ $uname =~ [Ss]un[Oo][Ss] ]];  IS_SOLARIS=$?

Или как:

uname=$(uname | tr [A-Z] [a-z])
[[ $uname =~ darwin ]]; IS_DARWIN=$?
[[ $uname =~ sunos ]];  IS_SOLARIS=$?

Или простейший

uname=$(uname)
[[ $uname =~ Darwin ]]; IS_DARWIN=$?
[[ $uname =~ SunOS ]];  IS_SOLARIS=$?

Пример запускается из Solaris (SunOS).

-bash-3.2$ uname
SunOS
-bash-3.2$ uname=$(uname | tr [A-Z] [a-z])
-bash-3.2$ [[ $uname =~ sunos ]];  IS_SOLARIS=$?; echo $IS_SOLARIS
0

-bash-3.2$ uname
SunOS
-bash-3.2$ uname=$(uname)
-bash-3.2$ [[ $uname =~ [Ss]un[Oo][Ss] ]];  IS_SOLARIS=$?; echo $IS_SOLARIS
0

-bash-3.2$ uname
SunOS
-bash-3.2$ uname=$(uname)
-bash-3.2$ [[ $uname =~ SunOS ]];  IS_SOLARIS=$?; echo $IS_SOLARIS
0
-bash-3.2$

-bash-3.2$ uname
SunOS
-bash-3.2$ [[ $(uname) =~ SunOS ]];  IS_SOLARIS=$?; echo $IS_SOLARIS
0
-bash-3.2$
3
27.01.2020, 23:19

Теги

Похожие вопросы