Для того, чтобы бежать, ssh-agent
я должен использовать
eval $(ssh-agent)
Почему я должен eval
на выходе ssh-agent
?
Почему он не предназначен для того, чтобы я мог его запустить?
Примечание: обратные галочки (`) удалены, поскольку они устарели. Вы можете прочитать об этом здесь, например .
man
страницу, для начала ...ssh-agent
то, что «спроектировано таким образом», это unix / linux, потому чтоssh-agent
запускается в дочернем процессе оболочки. Дочерние процессы не могут изменять родительские процессы. Но функция может: потому что она выполняется в текущем процессе. Таким образом , вы могли бы написать функцию:do_set_ssh_agent() { eval
SSH-агент ,; }
и что можно было бы работать просто как:$ do_set_ssh_agent
. Но «программы» (как правило) не устанавливаются как «функции» в linux / unix; вместо этого программы устанавливаются в виде файлов, которые, как уже упоминалось, выполняются в дочернем процессе. (Сценарии поиска являются исключением, но ssh-agent является двоичным.)Ответы:
ssh-agent
выводит переменные окружения, которые вам нужно подключить к нему:Позвонив,
eval
вы немедленно загрузите эти переменные в свою среду.Что касается того, почему
ssh-agent
не может сделать это сам ... Обратите внимание на выбор слова. Не «не буду», « не могу ». В Unix процесс может изменять только свои собственные переменные окружения и передавать их дочерним элементам. Он не может изменить среду своего родительского процесса, потому что система этого не допустит. Это довольно простой дизайн безопасности.Вы можете обойти это
eval
, используя,ssh-agent utility
гдеutility
находится ваша оболочка входа в систему, ваш оконный менеджер или все, что нужно для установки переменных среды SSH. Это также упоминается в руководстве.источник
eval
, используя,ssh-agent utility
гдеutility
ваша оболочка входа в систему, ваш оконный менеджер или что-то еще, для чего нужно установить переменные окружения SSH. Это также упоминается в руководстве. Никакая внешняя утилита не может устанавливать переменные в вызывающей среде.