Насколько я понимаю, они эквивалентны; в обоих случаях exit
завершит экземпляр оболочки, выполняющей скрипт.
Ни одна из версий того, что у вас есть, не создает подоболочку. Чтобы доказать это, рассмотрим следующие эксперименты:
$ cat version1
#!/bin/bash
set -e
x=7
ls /tmp/does/not/exist &> /dev/null || {
x=42
}
echo $x
$./version1
42
$ cat version2
#!/bin/bash
set -e
x=7
if [ ! ls /tmp/does/not/exist &> /dev/null ]; then
x=42
fi
echo $x
$./version2
42
Если вы измените { }
в version1
на ()
(, как в следующей версии ), это создаст подоболочку. В результате модификация x
внутри ( )
не влияет на x
в вызывающей оболочке :
$ cat version3
#!/bin/bash
set -e
x=7
ls /tmp/does/not/exist 2> /dev/null || (
x=42
)
echo $x
$./version3
7
Медленное завершение работы после обновления может быть вызвано потерянными пакетами, которые больше не используются или не требуются для чего-либо после обновления программного обеспечения. Если это так, поиск потерянных пакетов и их удаление решит проблему.
Список потерянных пакетов:
pacman -Qtdq
Если приведенная выше команда находит потерянные пакеты, вы можете удалить их с помощью pacman. Удаление потерянных пакетов по одному предпочтительнее, чем удаление их всех с помощью одной команды, потому что некоторые пакеты, отмеченные как потерянные, могут по-прежнему требоваться другим пакетом, если этот пакет был загружен и установлен вручную, а не установлен с помощью pacman с вашего компьютера. включенные репозитории программного обеспечения.