Если у вас есть очистка, которую вы должны сделать при выходе, вы также можете использовать «ловушку» с ERR псевдосигнала. Это работает так же, как захват INT или любого другого сигнала; bash выбрасывает ERR, если какая-либо команда выходит с ненулевым значением:
# Create the trap with
# trap COMMAND SIGNAME [SIGNAME2 SIGNAME3...]
trap "rm -f /tmp/$MYTMPFILE; exit 1" ERR INT TERM
command1
command2
command3
# Partially turn off the trap.
trap - ERR
# Now a control-C will still cause cleanup, but
# a nonzero exit code won't:
ps aux | grep blahblahblah
Или, особенно если вы используете «set -e», вы можете заблокировать EXIT; тогда ваша ловушка будет выполнена, когда сценарий выйдет по какой-либо причине, включая нормальный конец, прерывания, выход, вызванный параметром -e и т. д.
Измените инициализацию «пути» на:
Dim paths = doc.Descendants("dir").Where(Function(dir) String.Equals(folderToFind, CStr(dir.Attribute("name")), StringComparison.OrdinalIgnoreCase)).Select(Function(dir) dir.AncestorsAndSelf().Select(Function(el) CStr(el.Attribute("name"))).Reverse().Aggregate(String.Empty, AddressOf Path.Combine))
Из того, что я могу сказать, это просто «AddressOf», который вам не хватает. (Ваш код с вышеуказанным изменением компилируется для меня).
(Использование AddressOf передает функцию без фактического вызова функции).