Запуск 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 «злым».

Другие вопросы по тегам