Почему шаблон «команда || true »полезно?

Попробуйте так:

./LinuxConfigurationScript.sh -r us-east-1 <<EOF
command 1
command 2
EOF

Хорошо, давайте сделаем полный пример:

Вот мой первый скрипт test.sh, который задает несколько вопросов (ваш LinuxConfigurationScript.sh эквивалент)

read -p "Question 1?" ans
echo $ans
read -p "Question 2?" ans
echo $ans
read -p "Question 3?" ans
echo $ans
read -p "Question 4?" ans
echo $ans

Вот мой второй скрипт test2. sh, который вызывает первый и отвечает на все вопросы:

./test.sh <<EOF
answer 1
answer 2
answer 3
answer 4
EOF

И альтернатива в одну строку:

{ echo "answer 1"; echo "answer 2"; echo "answer 3"; echo "answer 4"; } | ./test.sh
84
26.11.2016, 00:46
2 ответа

Причина этого шаблона в том, что сценарии сопровождающего в пакетах Debian обычно начинаются с set -e , что приводит к завершению работы оболочки, как только любая команда (строго говоря, конвейерная, список или составная команда) завершается с ненулевым статусом. Это гарантирует, что ошибки не накапливаются: как только что-то пойдет не так, сценарий прерывается.

В случаях, когда команда в сценарии может завершиться ошибкой, добавляется || true гарантирует, что результирующая составная команда всегда завершается с нулевым статусом, поэтому сценарий не прерывается. Например, удаление каталога не должно быть фатальной ошибкой (предотвращающей удаление пакета); поэтому мы будем использовать

rmdir ... || true

, поскольку rmdir не имеет возможности указать ему игнорировать ошибки.

178
27.01.2020, 19:30

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

Перефразируя: маскирует ошибку статус предыдущей команды.

michael@x071:[/usr/sbin]cat /tmp/false.sh
#!/bin/sh
false

michael@x071:[/usr/sbin]cat /tmp/true.sh 
#!/bin/sh
false || true

michael@x071:[/usr/sbin]sh /tmp/false.sh; echo $?
1
michael@x071:[/usr/sbin]sh /tmp/true.sh; echo $? 
0
34
27.01.2020, 19:30

Теги

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