Выяснилось, что код выхода на самом деле не нужен.Поскольку yad выводит выбранную строку на стандартный вывод, и ничего там, если процесс умер, я попробовал это:
SELPIPE=$(mktemp -u -p "${XDG_RUNTIME_DIR}" "${0##*/}.XXXXXXXXXX")
mkfifo "$SELPIPE"
exec 4<> "$SELPIPE"
yad... 2>/dev/null 1>&4 &
yad_pid=$!
#wait for notification
( read -u 3 line && kill -USR2 $yad_pid ) 2>/dev/null &
pidof_killer=$!
#wait for yad termination and read its stdout on a timeout. If triggers timeout, it's empty
wait $yad_pid
read -u 4 -t 1 SEL
exec 4>&- #close FD4
kill $pidof_killer 2>/dev/null
#etc
Это работает, за исключением того, что убитые процессы любят писать уродливые строки $PID Terminated.
Это еще один случай, когда прерванное резервное копирование оставляет дублирование в состоянии, когда его невозможно восстановить. Я удалил частичные файлы из последней инкрементной резервной копии, и теперь она снова работает.
Done in 2 steps Tested and worked fine in both scenarios
а. cp orginalfile fileneedto_be_changed
' (Нужно сделать только один Раз)
orginalfile=====>which supposed to be changed
б.
differencecount=`awk 'NR==FNR{a[$0];next}!($0 in a){print $0}' orginalfile fileneedto_be_changed|wc -l`
if [ $differencecount -eq 0 ]
then
echo "NO changes in file"
else
echo "Noted there is changes in file"
fi
-121 ---47558 -Глядя на исходный код, загружаемый с gnu , кажется, что он пытается обработать исключение и при этом получает исключение, что бесполезно. Я думаю, вы находитесь в самых последних строках/usr/bin/duplicity
:
except Exception as e:
util.release_lockfile()
if "Forced assertion for testing" in util.uexc(e):
log.FatalError(u"%s: %s" % (e.__class__.__name__, util.uexc(e)),
log.ErrorCode.exception,
e.__class__.__name__)
else:
# Traceback and that mess
log.FatalError(util.exception_traceback(),
log.ErrorCode.exception,
e.__class__.__name__)
Он вызывает util.uexc(e)
для поиска текста, который используется только во время тестирования (, по-видимому ), и по какой-то причине эта процедура не работает. Вы можете попробовать просто изменить if
на запуск if False and
вместо того, чтобы обойти этот тест и посмотреть, получите ли вы тогда реальную причину зарегистрированного исключения. Вы также можете попробовать временно перейти на локаль C, чтобы посмотреть, изменит ли это что-нибудь.