Запуск ssh-агента не устанавливает переменные среды
Что я не понимаю?
я бегуssh-agent
и, похоже, он устанавливает некоторые переменные среды, но когда яecho
их, я не получаю в ответ то, что ожидаю.
❯ ssh-agent
SSH_AUTH_SOCK=/var/folders/pn/b_2jl_j55kl504pvctj2jw2c0000gn/T//ssh-SGC2u3LSE0Gu/agent.6521; export SSH_AUTH_SOCK;
SSH_AGENT_PID=6522; export SSH_AGENT_PID;
echo Agent pid 6522;
~
❯ echo $SSH_AGENT_PID
~
❯ echo $SSH_AUTH_SOCK
/private/tmp/com.apple.launchd.lfH6wkqh4H/Listeners
1 ответ
это отдельный исполняемый файл. Он не может ни устанавливать, ни изменять переменные и среду вашей оболочки. Без отладчика это может сделать только сама оболочка (сравните этот ответ ).
Поэтому генерирует шелл-код для оценки оболочки . Вы действительно видели код, напечатанный на вашей консоли, но не оцененный. Правильный способ начать новый и установить переменные:
eval "$(ssh-agent)"
Примечания:
Руководства и инструкции обычно используют
eval `ssh-agent`
потому что это универсальный синтаксис, который должен работать во многих оболочках, независимо от того, -like или -like. Команда с
"$(…)"
следует современным передовым практикам использования оболочек -like, и в этом контексте ваш is-like.пытается определить, является ли ваша оболочка
sh
-как илиcsh
-like и соответственно генерирует шелл-код. Другими словами, он ведет себя какssh-agent -s
илиssh-agent -c
, в зависимости от того, что он «думает» о вашей оболочке. Если вы знаете, что ваша оболочкаzsh
тогда ты можешь предпочестьeval "$(ssh-agent -s)"
на случай, если инструмент по какой-то причине ошибется. Хотя обычно в этом нет необходимости.Почти всегда вам следует избегать , в целом его сложно использовать безопасно, некоторые говорят, что это «зло». Хотя с этим все в порядке , потому что
ssh-agent
намеренно разработан для использования сeval
, он генерирует полностью контролируемый шелл-код, который избегает областей и ловушек, которые делают eval «злым».