2016-08-18 6 views
0

rbenvから/usr/localをインストールし、/etc/profileに必要な環境変数を追加するbashスクリプトがあります。ソース/ etc/profileのbashスクリプト

#!/bin/bash 

exec {log_fd}>log.txt 

git clone https://github.com/rbenv/rbenv.git /usr/local/rbenv >&$log_fd 2>&1 
git clone https://github.com/rbenv/ruby-build.git /usr/local/rbenv/plugins/ruby-build >&$log_fd 2>&1 
echo 'export RBENV_ROOT=/usr/local/rbenv' >> /etc/profile >&$log_fd 2>&1 
echo 'export PATH="/usr/local/rbenv/bin:$PATH"' >> /etc/profile >&$log_fd 2>&1 
echo 'if which rbenv > /dev/null; then eval "$(rbenv init - --no-rehash)"; fi' >> /etc/profile >&$log_fd 2>&1 
. /etc/profile 

しかし、PATH変数はそれが必要としてエクスポートされていないが、RBENV_ROOTは次のとおりです。私のユーザーはrootです!

~#: printenv 
RBENV_ROOT=/usr/local/rbenv 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 
MAIL=/var/mail/root 
LANG=en_US.UTF-8 
RBENV_SHELL=bash 

私は右、PATHの一部として/usr/local/rbenv/を見ることを期待しますか?

私もパスを追加するための構文を切り替え試みたが、それが助けないかでした:これはすべての中ですので、私は出力をリダイレクトするよ、あなたは迷っている場合は

echo 'export PATH=$PATH:/usr/local/rbenv/bin' >> /etc/profile 2>&1 

をwhiptailメニュー。

なぜ、1つの変数がRBENV_ROOTと表示されますが、おそらく私はPATHを更新していませんか?

答えて

2

シーケンス>>/etc/profile >&$log_fd 2>&1は、echoをstdoutで実行し、stderrをファイル記述子$log_fdにリダイレクトし、/etc/profileにリダイレクトしません。これはリダイレクトがこの場合は左から右に処理され、stdoutになると最初から上書きされるためです。これを確認するには:

#!/bin/bash 
exec {fd}>/tmp/file1 
echo 'hello' >>/tmp/file2 >&$fd 2>&1 

は、この実行可能ファイルを作成し、helloだけ/tmp/file1に表示されていることを確認した後、それを実行します。

もちろん、これはなぜRBENV_ROOTであるかを説明しません。他のスタートアップファイルで設定したのでしょうか?

echo 'export PATH=$PATH:/usr/local/rbenv/bin' >>/etc/profile'を使用していると、私はUbuntu 14.04でこれを行うと、新しいディレクトリがPATHの一部として期待どおりに表示されることを確認できます。ただし、変更を確認するには、/etc/profileがソースになっていることを確認する必要があります。これは、ログインシェルを起動した場合にのみ発生します。例えば、env -i bash -lc 'echo $PATH'

+0

これは私が扱っている問題です...新しいログインシェルを起動する必要はないので、同じスクリプト内からソースを入手できますか? – Godzilla74

+0

'rbenv init - --no-rehash'が' PATH'をリセットできましたか? –

関連する問題