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

Другой вариант в Bash, если вы не возражаете против одного простого eval, вы можете сделать это с паройprintf:

# example data
password=secretvalue
chars_to_show=3

# the real thing
eval "printf '*%.0s' {1..$((${#password} - chars_to_show))}"
printf '%s\n' "${password: -chars_to_show}"

Но будьте осторожны:

  • исправить указанное выше, как вам нужно, когда ${#password}меньше, чем${chars_to_show}
  • evalможет быть очень опасным с ненадежным входом :здесь его можно считать безопасным, потому что его ввод поступает только из безопасных источников, т.е. длина ${password}и значение${chars_to_show}
0
06.07.2020, 10:45
2 ответа

Если вы хотите, чтобы все ваши тесты завершились, а затем вернули окончательный общий код состояния, вы должны запрограммировать его именно так. Вот один из способов

#!/bin/bash
#
ss=0

lint./module1/src/main/java || ((ss++))
lint./module2/src/main/java || ((ss++))
lint./module3/src/main/java || ((ss++))

exit $ss

В том виде, в котором он написан, происходит сбой с кодом выхода, соответствующим количеству неудачных тестов. Вы по-прежнему можете проверить истинность/ложь (ноль/не -ноль ), но если вам требуется, чтобы код завершался точно 1в случае, если какой-либо один или несколько тестов потерпели неудачу, измените ((ss++))на ss=1.

7
18.03.2021, 23:21

Это немного хак, но вы можете использовать xargsдля этой цели. По умолчанию он выполняет все команды и завершается со статусом 123, если какая-либо из них не удалась.

Здесь мы запускаем три команды, все из которых терпят неудачу, но все выполняются:

echo '
echo 1 && exit 1
echo 2 && exit 1
echo 3 && exit 1
' | xargs -d "\n" -L1 -I{} bash -c {}

Это завершает работу со статусом выхода 123 (GNU xargs ), но выводит следующее, показывая, что все три команды были выполнены:

1
2
3

Аналогичный набор команд, все из которых успешно завершаются со статусом 0:

echo '
echo 1 && exit 0
echo 2 && exit 0
echo 3 && exit 0
' | xargs -L1 -I{} bash -c {}

Здесь статус выхода равен 0, как и следовало ожидать.

1
18.09.2021, 01:08

Теги

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