Синтаксическая ошибка связана с тем, что и &
, и &&
являются разделителями команд. &
запускает команду в фоновом режиме и немедленно запускает следующую, тогда как &&
запускает первую команду, ждет ее завершения и запускает вторую команду, если первая выполнена успешно.
Чтобы создать фон для двух вещей, которые вы хотите запустить асинхронно с третьей вещью, используйте этот шаблон:
( first_thing && second_thing ) &
third_thing
Необязательноwait $!
после third_thing
, чтобы закончить первые два, прежде чем продолжить.
wait 1
ожидает завершения PID 1, что вряд ли произойдет во время работы вашей оболочки. Вам понадобится wait %1
, который ожидает спецификация задания 1.
Это очень жестокий, грязный и, вероятно, очень неправильный способ сделать это, но после того, как я какое-то время пытался разблокировать связку ключей через SSH, я придумал этот небольшой скрипт:
echo 'NOTE: This script will only work if launched via source or.' >&2
echo -n 'Login password: ' >&2
read -s _UNLOCK_PASSWORD || return
killall -q -u "$(whoami)" gnome-keyring-daemon
eval $(echo -n "${_UNLOCK_PASSWORD}" \
| gnome-keyring-daemon --daemonize --login \
| sed -e 's/^/export /')
unset _UNLOCK_PASSWORD
echo '' >&2
И да, когда я звоню . ~/bin/unlock-gnome-keyring
и ввожу свой пароль для входа, он разблокирует связку ключей для входа, я могу просмотреть ее в seahorse
, работая через удаленный X, и использовать ее через приложения libsecret.
Пожалуйста, имейте в виду, что я не эксперт по безопасности , и такой способ может иметь серьезные последствия для безопасности.Я не проверял, правильно ли очищается пароль в памяти и т. д., что может сделать вас более уязвимым для атак.
Существует (теперь )аргумент --unlock
для демона gnome -keyring -, который делает именно то, что вы хотите. Обычно, когда он вызывается, он разблокируется, затем демонизируется и повторяет SSH_AUTH_SOCK
. Если вы считаете, что демон уже может быть запущен, вы можете добавить аргумент --replace
, чтобы обеспечить плавный переход к новому демону.
Я вхожу в безголовую систему Ubuntu 20.0.4LTS через ssh с открытым ключом (без пароля )на регулярной основе, но иногда в целях разработки мне нужно, чтобы набор ключей был доступен. Итак, у меня есть следующая функция, определенная в моем профиле bash, и она отлично работает для разблокировки (, независимо от того, запущен ли существующий демон или нет):
# Linux unlock gnome keyring
function unlock-keyring ()
{
read -rsp "Password: " pass
export $(echo -n "$pass" | gnome-keyring-daemon --replace --unlock)
unset pass
}