Вот два метода:
Можно удостовериться, что связка ключей только открывается на одной вкладке как это:
if mkdir /tmp/keychain.lock; then
eval `keychain --eval --agents ssh id_dsa`
rm -r /tmp/keychain.lock
fi
Но это не может быть на первой вкладке, на которую Вы приземляетесь - Вам, возможно, придется искать для него, который мог быть столь же раздражающим. Это работает, потому что mkdir является атомарной операцией - только один сценарий успешно выполнится, и что каждый отобразит подсказку.
Иначе отобразит подсказку на всех вкладках, но выйдет из них, после того как Вы отвечаете на любом из них. Можно опросить файл или использовать inotify-инструменты как это:
file=/tmp/keychain-wait
touch $file
inotifywait -e delete_self $file |\
while read file event; do
if [ "$event" = "DELETE_SELF" ]; then
pkill keychain
fi
done &
keychain
rm $file
Эти подарки подсказка, но сначала это запускает наблюдателя, чтобы видеть, удален ли файл. После того, как подсказка удовлетворена, файл удален, и наблюдатель уничтожит любые другие подсказки, которые ожидают. inotifywait от inotify-инструментов; inotify является API Linux. На других Нельдах может быть подобный API, но в противном случае Вам только нужен цикл, который опрашивает, чтобы видеть, удален ли файл.
Контекст: принятие из вышеупомянутых комментариев, что BSDish libc
предназначен.
Я думаю, что это было изучено, но libc
имеет тенденцию быть плотно связанным с данным ядром (glibc
имеет уровень абстракции, который позволяет ему некоторую мобильность, но вызывает обычные проблемы, которые уровень абстракции вызывает), и делающий BSD libc
работа с ядром Linux потребовала бы, чтобы завершенная близость переписала. ключевые системные службы очень отличаются между этими двумя системами (один пример: BSD libc
предполагает, что нет никаких pipes/FIFOs, потому что BSD использует socketpairs вместо этого; с другой стороны Linux не поддерживает совместимый с каналом socketpairs).
Движение другого направления (Debian имеет экспериментальное пространство пользователя Linux на ядре FreeBSD, я думаю), возможно из-за glibc
слой мобильности.
Многие программы зависят от самого glibc
или glibc
макросов или просто glibc
стиля, поэтому сборка завершается неудачно. Вы можете легко починить любую программу, если знаете glibc
изнутри. Например, мы можем видеть здесь заголовки linux для musl
. Заголовки не закончены, но вы можете проверить коммиты и посмотреть, как выглядит эта работа.
Каждый разработчик тестирует свое программное обеспечение, используя систему, основанную на glibc
. Невозможно исправить всю разработку программного обеспечения в реальном времени и сделать его совместимым с другим libc
, используя правильное решение, такое как запрос на включение. Таким образом, системы общего назначения, такие как gentoo
, не могут быть построены с использованием альтернативной libc без бесконечных усилий.
Разработчики встраиваемых систем (из openwrt
, например ), исправляют версии программного обеспечения и выполняют тяжелую работу по их устранению. Таким образом, встроенная система (, такая как openwrt
), может предоставить только источник , который можно собрать с помощью альтернативной libc, такой как musl
или uclibc
.
Единственный безболезненный и правильный способ заменить glibc
другим libc
— это реализовать специальную оболочку, которая имитирует все glibc
поведения, используя другие libc
. Сегодня такого проекта нет.