Для каждой команды вы можете коснуться файла и проверить этот файл. Вот простой пример:
#!/usr/local/bin/bash
# Flag to knkow when completed
finished=0;
# The commands t run
declare -a commands=('cmd1' 'cmd2' 'cmd3' 'cmd4');
# Fork all commands
for cmd in "${commands[@]}"; do
./$cmd &
done
# Loop to wait for all processes to finish
loop=0;
while [ $finished -eq 0 ]; do
# Just for visual effect
loop=$((loop+1));
echo "Loop $loop";
sleep 1;
files=0;
for cmd in "${commands[@]}"; do
# Each program shoudl touch a file so that we
# can know it has completed successfully
if [ -e ".$cmd" ]; then
echo "Process $cmd completed";
files=$((files+1));
else
# No need to continue if anything is not done
# Error checking here like a TTL value or ps -ef | grep pid etc
echo "Waiting for process $cmd";
break;
fi;
done
# if we have as many files as executed commands
if [ "$files" -eq ${#commands[@]} ]; then
finished=1;
fi
done;
echo 'All jobs completed successfully';
# Clean up after yourself
for cmd in "${commands[@]}"; do
rm -f ".$cmd";
done;
Тогда для проверки каждой команды cmd1, cmd2 ... cmdN может быть что-то вроде:
#!/usr/local/bin/bash
num=1;
echo "Enter cmd$num";
sleep 1; # use different sleep values to simulate execution
touch ".cmd$num"
echo "Exit cmd$num";
Общий подход заключается в том, чтобы просмотреть (сценарий оболочки)/var/lib/dpkg/info/lilypond-data.postinst
и найти ln
строку, в которой произошел сбой. Затем определите причину и обойдите ее (, например, rm
перейдя по существующей ссылке, или, в худшем случае, отредактировав postinst ). И, конечно же, зарегистрируйте ошибку.
За исключением того, что это уже сделал кто-то другой — см. ошибку 871631 . И ошибка была исправлена; вам просто нужно взять (и установить )2.18.2 -9 из нестабильной версии.
(Из чего следует важный урок :проверьте систему отслеживания ошибок, прежде чем думать о том, как ее исправить...)
Также :вы можете установить apt -listbugs.
Эта часть показывает, что важно:
ln: failed to create symbolic link 'lilypond/user': File exists
dpkg: error processing package lilypond-data (--configure):
subprocess installed post-installation script returned error exit status 1
Ошибка сценария установки вашего поста -. Вероятно, это связано с тем, что он не был настроен для правильной обработки своей предыдущей версии в стабильной версии.
Пакеты Debian состоят из двух компонентов.:
.tar.gz
(или любой подобный ), распакованный в корневой каталог Таким образом, установка пакета выглядит так:
Удаление происходит аналогичным образом, но со сценарием до -удаления и после -удаления.
В вашем случае произошло обновление пакета, тогда порядок вызова скрипта немного сложнее, но не сильно.
От них пост--скрипт установки нового пакета по какой-то причине не запустился. Таким образом, он уже извлечен в вашей системе.
Поскольку это разрабатываемый дистрибутив, исправить проблему вручную несложно.
Отредактируйте старый скрипт установки поста -.
vi /var/lib/dpkg/info/lilypond-data.postinst
Найдите, где он не может создать эту ссылку, и дайте ему это разрешить.
После этого запустите:
dpkg --configure -a
сделает то, что вы хотите. (Если это не удалось, не беспокойтесь, отредактируйте еще раз и повторите попытку.)