Проблемы с установкой $ PATH в Bash в Ubuntu в Windows (подсистема Linux)

Я использую «Bash в Ubuntu в Windows» (подсистема Linux) и хочу добавить Terraform в свой $ PATH. Поскольку Terraform не может быть установлен через apt-get, я сделал следующие шаги:

  1. Перешел в этот каталог, где я хотел установить Terraform:

    cd / usr / local

  2. По указанному выше пути я использовал wget для загрузки Terraform:

    wget https://releases.hashicorp.com/terraform/0.9.8/terraform_0.9.8_linux_amd64.zip

  3. Terraform успешно распаковывает! Когда я открываю файл в VIM, все хорошо:

    распаковать terraform_0.9.8_linux_amd64.zip

  4. Затем я ввожу эту команду, чтобы проверить, доступен ли двоичный файл Terraform из командной строки:

    terraform -version

Однако возвращается следующее сообщение:

terraform: command not found

Это говорит мне, что загруженное местоположение Terraform необходимо добавить в мой $ PATH.

  1. Уже войдя в систему как пользователь root ("sudo su"), я ввожу следующую команду для доступа к ".profile":

vim ~ / .profile

Следующее уже есть в этом файле, который я оставляю нетронутым:

 # ~/.profile: executed by Bourne-compatible login shells.

 if [ "$BASH" ]; then
   if [ -f ~/.bashrc ]; then
     . ~/.bashrc
   fi
 fi

 mesg n

Сразу под этим текстом я добавляю следующее и успешно сохраняю файл с помощью : wq!:

 export PATH=/usr/local/bin:$PATH
 export PATH=$PATH:/usr/local/terraform

6. Затем я снова ввожу следующую команду, чтобы проверить, обнаружен ли терраформ.

terraform -version

По-прежнему возвращается то же сообщение «terraform: команда не найдена». Я даже попытался закрыть и запустить новый сеанс командной строки и даже перезагрузить компьютер. По-прежнему без изменений.

У кого-нибудь есть идеи, как это решить? Опять же, обратите внимание, что я использую «Bash в Ubuntu в Windows» (подсистема Linux). Любой вклад будет оценен!


person user791134    schedule 03.12.2017    source источник
comment
Я немного загрузлю Win10 с WSL для подтверждения, но убедитесь, что Ubuntu использует (источники) ~/.profile, а не ~/.bash_profile. Некоторые дистрибутивы используют тот или иной, и я не помню, что делает Ubuntu. Например, SuSE делает первое, а Archlinux - второе.   -  person David C. Rankin    schedule 03.12.2017
comment
Загрузка zip-пакета в системный каталог - это странно и небрежно. /usr/local, вероятно, является хорошим местом для установки файлов, которые вы извлекаете из архива (библиотеки для /usr/local/lib, двоичные файлы для /usr/local/bin и т. Д.), И если вы все сделаете правильно, вам, вероятно, не нужно обновлять PATH или другие параметры конфигурации системы. Традиционно tarball (не zip) будет содержать configure скрипт, который создает Makefile или что-то еще, что позволяет вам запустить простой скрипт для установки (и удаления) пакета.   -  person tripleee    schedule 03.12.2017


Ответы (2)


Прямой ответ на вашу проблему находится в конце. Но я думаю, что будет больше смысла, если вы продолжите читать отсюда.

Прежде чем пытаться добавить в PATH, я рекомендую сначала протестировать программу. В вашем случае я бы сделал так:

wget https://releases.hashicorp.com/terraform/0.9.8/terraform_0.9.8_linux_amd64.zip
unzip terraform_0.9.8_linux_amd64.zip
./terraform

Обратите внимание на последнюю строку ./terraform. ZIP-файл содержит единственный файл terraform, который теперь должен находиться в текущем каталоге, поэтому я могу запустить его с помощью ./terraform. Если это исполняемый файл. Если это не исполняемый файл, подтвердите его:

ls -l terraform

И при необходимости сделайте его исполняемым:

chmod +x terraform

Теперь добавим его в PATH. Но сначала давайте решим, куда поместить этот исполняемый файл. /usr/local/bin кажется разумным местом. Итак, переместим исполняемый файл terraform в этот каталог.

Обычно /usr/local/bin уже включен PATH, поэтому вам, возможно, не нужно ничего менять. Теперь вы можете попробовать свой чек, и, скорее всего, он уже работает:

terraform -version

Если нет, значит /usr/local/bin нет на PATH. Чтобы добавить это, добавьте эту строку в ~/.profile:

export PATH=$PATH:/usr/local/bin

В вашем подходе выглядели две принципиально неправильные вещи:

  1. Добавление /usr/local/terraform в PATH. Это подозрительно, потому что записи на PATH должны быть каталогами, а в вашем сообщении ничего не указывает, что вы создали каталог в /usr/local/terraform.

    • You cd into /usr/local, and then unzip the zip file of terraform. The linked zip contains a single file named terraform, so /usr/local/terraform in your example should be a file.
    • Если это файл, то вы можете сделать его исполняемым как terraform, добавив to add в PATH его базовый каталог. Но добавление /usr/local к PATH было бы не очень хорошей идеей. Обычно двоичные файлы помещают в /usr/local/bin, а не прямо в /usr/local
  2. Вы не упомянули, как перезагружали ~/.profile. После редактирования этого файла новые добавленные вами команды не будут автоматически выполняться в вашей текущей оболочке. Они будут выполнены, когда вы откроете новую оболочку. Или вы можете вручную выполнить добавленные команды в текущей оболочке.

person janos    schedule 03.12.2017
comment
Это потрясающе! Большое спасибо @janos! Красиво объяснено! Я тоже ценю усилия, @David! Проблема, похоже, связана с тем, что я не сохранил файл в usr/local/bin. Идея добавить /usr/local/terraform в PATH, а также сохранить его по этому пути к каталогу, была взята из учебника, за которым я следил вне сети, поэтому я слепо последовал ему, предполагая, что он знает что-то, чего я не смею! - person user791134; 03.12.2017
comment
@ user791134 хорошо, что вы точно описали все свои действия, это позволило легко определить проблему. Мало кто задает такой вопрос (и у них меньше шансов получить хорошие ответы: потеря для всех). Ты тоже молодец! - person janos; 03.12.2017

Нажмите ниже команды

export PATH=$PATH:/usr/local/bin
person user13492635    schedule 07.05.2020
comment
Я не думаю, что этот ответ добавляет что-либо, что еще не описано в подробном принятом ответе. - person Matt Raines; 08.05.2020