Вот универсальная информация для обновления, debian основывал дистрибутив:
/etc/apt/sources.list
в репозиторий новой версии.apt-get update
apt-get dist-upgrade
Необходимо провести независимое исследование о том, как обновить исходный файл (файлы). Я нашел это хотя:
deb http://packages.linuxmint.com/ maya main upstream import
deb http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ precise-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ precise-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu/ precise partner
deb http://packages.medibuntu.org/ precise free non-free
#deb http://archive.getdeb.net/ubuntu precise-getdeb apps
#deb http://archive.getdeb.net/ubuntu precise-getdeb games
Проблема состоит в том, что Вы выходите wait
в подоболочке:
if `wait $!`;then
Поскольку wait
встроенное, не команда, она воздействует на подоболочку, не Вашу текущую оболочку.
Вывод, который Вы видели бы, но не:
wait: pid 12344 is not a child of this shell
... со статусом возврата 1.
Для выполнения теста, необходимо будет сделать это, не используя подоболочку.
#!/bin/bash
function back()
{
sleep $1
exit $2
}
back $1 $2 &
b=$!
wait $b && echo success || echo failure
Это дает результат, который Вы ожидаете, и ожидает, пока Вы ожидаете:
$ time ./test.sh 3 0
success
./test.sh 3 0 0.00s user 0.01s system 0% cpu 3.012 total
$ time ./test.sh 3 1
failure
./test.sh 3 1 0.00s user 0.01s system 0% cpu 3.012 total
Можно проверить статус выхода любой команды с $?
:
$ /bin/true
$ echo $?
0
$ /bin/false
$ echo $?
1
В Вашем сценарии было несколько других ошибок. Ваш #!
строка была уродлива, который я зафиксировал. Вы присваиваетесь $!
кому: $b
, но не используйте $b
.
Удалите обратные галочки.
Как, Вы выполняетесь wait
в подоболочке, которая не имеет доступа к заданиям родительской оболочки, таким образом, он сразу перестанет работать.
Если Вы хотите статус выхода, получаете значение $?
сразу после ожидания.
command_here &
wait
status=$?
Удаление обратных галочек заставит программу работать, но не полностью из-за причин, уже определенных. Это верно это wait
сбои сразу, потому что это работает в подоболочке и не может получить доступ к процессам своего родителя, но программе, не работали бы как ожидалось даже при использовании команды, которая действительно работала.
if
оператор запускает программу и проверяет, является ли ее статус выхода нулем или ненулевой. При использовании обратных галочек, если оператор возьмет вывод процесса, попытайтесь выполнить его как программу и затем использовать код выхода для того процесса. Таким образом, программа не перестала работать потому что wait
сбои, а скорее это перестало работать потому что wait
не производит вывода.
Можно заставить сценарий работать при помощи echo
в обратных галочках:
if `echo wait $!`; then
echo success
else
echo failure
fi
Или просто удалите обратные галочки; легче для всех.