X-сервер перестанет работать, если Вы уничтожите основной процесс сессии, и все другие X-клиенты умрут, когда они потеряют соединение с X-сервером.
Под Gnome (по крайней мере, в соответствии с Ubuntu 10.04), процесс сессии gnome-session
. Если Вы не используете настольную среду, процесс, который Вы хотите, является менеджером сеансов, или если Вы не работаете один, менеджер окон. Более точно процесс, который необходимо уничтожить, является первым клиентом, который соединился с X-сервером.
К сожалению, нет никакой стандартной утилиты для генерации криптографической контрольной суммы. Существует стандартная утилита для генерации CRC: cksum
; это может быть достаточно для Вашей цели обнаружить изменения в невраждебном окружении.
Я рекомендовал бы использовать SHA1, а не MD5. Нет многих систем, которые имеют утилиту MD5, но № SHA1, и если Вы собираетесь использовать криптографические контрольные суммы, Вы могли бы также использовать алгоритм без известного метода для нахождения коллизий (предполагающий, что Вы также проверяете размер).
Один инструмент это не стандартно, но распространено и может вычислить, обзоры OpenSSL. Это доступно для Cygwin, Debian и OSX, но к сожалению не части стандартной установки на OSX.
openssl dgst -sha1
На OSX 10.6 существует a shasum
утилита, которая также присутствует на Debian (это - часть perl
пакет) и я верю на Cygwin также. Это - сценарий Perl. Большинству систем Unix установили Perl, таким образом, Вы могли связать тот сценарий вместе со своим make-файлом, если Вы волнуетесь по поводу этого сценария, не являющегося доступным везде.
Хорошо, скажем, Вы действительно не можете найти команду, которая работает везде.
Используйте type
встроенный, чтобы видеть, доступна ли команда.
sum=
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do
if type "${x%% *}" >/dev/null 2>/dev/null; then sum=$x; break; fi
done
if [ -z "$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
$sum *.org
Можно использовать shell
функционируйте для выполнения отрывка оболочки, когда make-файл загружается, и сохраните вывод в переменной.
sum := $(shell { command -v sha1sum || command -v sha1 || command -v shasum; } 2>/dev/null)
%.sum: %
$(sum) $< >$@
Можно только выполнить команды оболочки в правиле, таким образом, каждое правило, которое вычисляет контрольную сумму, должно содержать код поиска. Можно поместить отрывок в переменную. Помните, что отдельные строки в правилах оценены независимо. Также помните это $
к знакам, которые должны быть переданы оболочке, нужно оставить $$
.
determine_sum = \
sum=; \
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do \
if type "$${x%% *}" >/dev/null 2>/dev/null; then sum=$$x; break; fi; \
done; \
if [ -z "$$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
checksums.dat: FORCE
$(determine_sum); \
$$sum *.org
Это - что-то вроде взлома, но Вы могли протестировать, существует ли каждый, и выполните их, если они делают:
[ -x "`which md5 2>/dev/null`" ] && md5 newfile >>sums
[ -x "`which md5sum 2>/dev/null`" ] && md5sum newfile >>sums
Я совершенно уверен, cygwin распознает команды (включая md5sum
) без .exe
, но включайте его, если Вы имеете к.
which
значения выхода не являются портативными. Использовать type
вместо этого (и Вы, вероятно, хотите использовать if; then; elif
чтобы не иметь проблемы там несколько исполняемых файлов). which
и type
только ищите исполняемые файлы так или иначе, таким образом, Ваш тест с-x бессмыслен.
– Chris Down
13.01.2012, 09:00
Так как Вы выполняете emacs, затем Вы могли использовать сам emacs для вычислений контрольных сумм: http://www.gnu.org/software/emacs/manual/html_node/elisp/MD5-Checksum.html.
Любой GNU автоинструменты (как упомянуто в комментарии), или также CMake является опцией.
Автоинструменты GNU являются более традиционным подходом, но (и возможно разговор только за меня) я не думаю, что люди действительно слишком взволнованы перспективой начальной установки проекта с помощью них. Ну, это - кривая обучения в любом случае. CMake является более новым ребенком на блоке, и возможно менее распространенный (и все еще имеет кривую обучения). Это имеет свой собственный синтаксис, и это генерирует make-файлы для Вашей платформы. CMake делает имеет явное преимущество того, чтобы быть не так un*x-centric; это работает надежно над Unix, окнами и Mac также (например, это может генерировать msvc проекты, например, вместо make-файлов.)
Править: и конечно так как 'make-файлы' были предложены, этот ответ соглашается с тем предположением. Но возможно просто сценарий Python или (удушье) простая программа Java более подходили бы для этой задачи; сценарии/язык программирования сделали бы это то же через платформы.
-P
опцияtype
управляйте для получения, "GNU делают" метод описанным выше для работы правильно, таким образом, я закончил сsum := $(shell { type -P sha1sum || type -P sha1 || type -P shasum; } 2>/dev/null)
. – Sean 27.03.2015, 07:08type -P
только работы, если Ваша оболочка является ударом, не, если это, например, ksh или тире (который имеет место на Ubuntu среди других). Можно использоватьcommand -v
для мобильности. – Gilles 'SO- stop being evil' 27.03.2015, 10:32type
к использованиюcommand
. Другие методы должны быть обновлены также? – Sean 27.03.2015, 18:30type
к использованиюcommand
. Другие методы должны быть обновлены также? – Sean 27.03.2015, 18:30type
корректный, портативный способ протестировать присутствие команды, проблема с ним состоит в том, что оно производит вывод какsha1sum is /usr/bin/sha1sum
вместо просто названия программы. Это было единственным местом, где я использовал выводtype
вместо просто его возвращаемого значения. – Gilles 'SO- stop being evil' 27.03.2015, 19:12