2016-08-28 5 views
1

Я пытаюсь написать сценарий bash для автоматического запуска go get/install в разных каталогах. Соответствующая часть здесь:Сценарий Bash не может выполнить команду Go

(cd ../web ; go get) 
(cd ../web ; go install) 
(cd ../services ; go get) 
(cd ../services ; go install) 

Когда я выполнить сценарий, я получаю это, хотя:

  • кд ../web
  • идут получить
    ./staging.sh: линия 43 : go: команда не найдена
  • cd ../web
  • go install
    ./staging.sh: строка 44: идти: команда не найдена
  • кд ../services
  • идут получить
    ./staging.sh: строка 45: перейти: команда не найдена
  • кд. ./services
  • идут установить
    ./staging.sh: строка 46: перейти: команда не найдена

Если я просто перейду в каталоги вручную и запустил команды, они отлично работают. Почему они не выполняются при запуске из сценария?

+4

Является ли 'go' в $ PATH? – jedifans

+0

Звучит как проблема пути. Попробуйте добавить 'printenv | grep PATH' в ваш скрипт и убедитесь, что двоичный файл 'go' находится в одной из перечисленных папок. Если вы только что установили go, попробуйте запустить новый терминал – pnovotnak

+0

Я получаю путь как: 'PATH =/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ' Что отличает, если я запускаю grep путь, когда я иду в файл. Таким образом, это, вероятно, проблема. Как заставить скрипт получить правильный путь? – Graham

ответ

3

Я предполагаю, что вы выполнили инструкции по установке на странице установки go, в которой говорится, что вы добавляете некоторые строки в ваш файл ~/.profile. Этот файл doesn't load for non-interactive sessions (eg; your script.) Вам нужно либо добавить его в rcfile вашей оболочки, либо ссылку на двоичный файл go, это полный путь в вашем скрипте.

Вы можете узнать полный путь go, запустив в вашей оболочке:

$ which go 
/path/to/go 

Затем в сценарии:

GO=/path/to/go 
$GO command 

Или, вы можете расширить PATH внутри сценария:

PATH=$PATH:/path/to 
+0

Я пробовал оба из них. Он распознает команду сейчас, но не будет загружать ни одну из сторонних библиотек, потому что GOPATH не установлен. Я попытался установить GOPATH в скрипте так же, как он установлен в '~/.profile', но он не работает. – Graham

+0

Повторите попытку печати, но на этот раз без grep. – jedifans

+0

Наконец выяснилось. После того, как я поместил пути в etc/bash.bashrc, я не получил оттуда, пока не добавил: '#!/Bin/bash chmod a + x /etc/bash.bashrc PS1 = '$' источник/и т.д./bash.bashrc' – Graham

Смежные вопросы