2016-08-28 15 views
1

別のディレクトリにget/installを自動的に実行するbashスクリプトを作成しようとしています。関連する部分はここにある:BashスクリプトはGoコマンドを実行できません

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

私は、スクリプトを実行すると、私はこのかかわらを得る:行43:

  • のCD ../web

  • ./staging.shを取りに行きます:go:コマンドが見つかりません
  • cd ../web
  • go install
    ./staging.sh:行44:行く:行45::行く:コマンド
  • 見つからないCDが
  • を../services
    ./staging.shを取りに行くコマンドは
  • CDが見つかりません。行46:行く:./services

  • ./staging.shをインストール行くコマンドは
が見つかりません10

ディレクトリに手動で移動してコマンドを実行するだけで正常に動作します。なぜ彼らはスクリプトから実行しているときに実行されていないのですか?

+4

$ PATHに 'go'ですか? – 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

私はあなたの~/.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が設定されていないため、第三者のライブラリはダウンロードされません。私は '〜/ .profile'で設定したのと同じ方法でGOPATHをスクリプトで設定しようとしましたが、動作していないようです。 – Graham

+0

grepを使わずにprintenvをもう一度やってみてください。 – jedifans

+0

最後に分かりました。 etc/bash.bashrcにパスを入れた後、私が追加するまでそこから調達していなかった: '#!/ bin/bash chmod a + x /etc/bash.bashrc PS1 = '$' ソース/ etc/bash.bashrc' – Graham

関連する問題