.profileと.bashrcがMacで機能しない


29

この問題は私が長い間持っています。ターミナル.profileを実行した後、.bashrcファイルは機能しません(実行されません)。どこから問題の原因を探すべきかを示していただけますか?


このファイルに適切な権限があるかどうかを確認してください

はい...あなたは正しい理由は本当に愚かだった-不正なパーミッションchmod + x〜/ .profileとすべてがうまく機能しています。

5
@xTrol:それは意味~/.profileがなく、実行許可を必要としません。(シェルはそれをソースとし、実行しません)。chmod -x ~/.profileまだ動作するかどうか試してみてください。
キーストンプソン

回答:


40

.profile実行されていないという問題がありました。(で説明したように、それは結局のところ、このアップルStackExchange答え)あなたが持っている場合ということ.bash_profile.bash_login、ファイル、そしてあなたは、.profilebashのでは無視されます。


2
私の問題は、.profileが実行されない原因となる.bash_profileファイルを自動的に作成するPythonをインストールしたことです。

5
この答えは私を助けます。.bash_loginインストール後に追加されましたrvm

17

このQ&Aはスーパーユーザーに行くべきだと思いますが、とにかく:

manページのセクションINVOCATIONによると、

  • /etc/profileおよび~/.profile対話型ログインシェルのために読み込まれ、
  • ~/.bashrc 対話型の非ログインシェルについて読み込まれます。

他のUNIXマシンが~/.bashrc対話型ログインシェルであっても自動的に読み取る場合は、システム全体/etc/ profileにを読み取る行があるためです~/.bashrc。OS Xのシステム全体に/etc/profileはありません。

したがって、~/.bashrc対話型ログインシェルでも実行する場合は、次の行を含める必要があります。

. ~/.bashrc

あなたの~/.profile


そして、ここで不足している部分を埋めるために:ターミナルシェル(OPの質問でした)は、デフォルトでは対話型ログインシェルです。
-LarsH

3

「手作業」で調達してみてください。

source ~/.profile

そして何が起こるかを見てください。他の人が指摘しているように、.profileはログインシェルから、.bashrcは非ログインシェルから供給されることに注意してください。両方ではなく、どちらかを試してください。


2

端末の設定で、「スタートアップ」ペインを確認します。次のオプションがあります。

シェルは以下で開きます:

  • デフォルトのログインシェル(/ usr / bin / login)
  • コマンド(完全なパス)

「デフォルト」を選択しました...カスタムコマンドを選択した場合、それが要因になる可能性があります。

次に確認するポイントは、シェルがログインシェルとして起動されているかどうかです。私が行うとpsリストを、私は以下を参照してください。

  PID TTY           TIME CMD
24088 ttys000    0:00.03 -sh
24614 ttys001    0:00.03 -sh
25127 ttys002    0:00.05 -sh
35544 ttys003    0:00.08 -sh
40926 ttys004    0:00.03 -sh

ここで重要なの-は、シェル名の前の「」です。これは、プロファイルと関連するものを実行するようシェルに指示します。現在のウィンドウでそれが表示されない場合は、表示されるまで設定をいじる必要があります。

端末設定の設定ペインには、シェルオプションも一覧表示されます。私は/ bin / shを私のものにリストしています。


これは必要ないはずです

最悪の事態が最悪の場合は、過去の他の非協調システムで行ったように実行できます-Windowsから実行できるプログラム 'loginsh'を作成し、選択したシェルを ' -' で実行しますログインシェルとして機能するように指示するプレフィックス。

#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "stderr.h"
#include "jlss.h"

#ifndef DEFAULT_SHELL
#define DEFAULT_SHELL   "/bin/sh"
#endif /* DEFAULT_SHELL */

#ifndef MAX_SHELLBASENAME
#define MAX_SHELLBASENAME   256
#endif /* MAX_SHELLBASENAME */

#ifndef lint
static const char sccs[] = "@(#)$Id: loginsh.c,v 4.2 2005/06/22 19:44:07 jleffler Exp $";
#endif

int main(int argc, char **argv)
{
    char     *shell;
    char      shellname[MAX_SHELLBASENAME];

    err_setarg0(argv[0]);

    /* Which shell to use? */
    if ((shell = getenv("SHELL")) == (char *)0)
        shell = DEFAULT_SHELL;

    /* Set up argv[0] in new argument list; reuse old argv space */
    shellname[0] = '-';
    strcpy(&shellname[1], jlss_basename(shell));
    argv[0] = shellname;

    /* Execv must work -- the shell must be an executable program */
    execv(shell, &argv[0]);
    err_syserr("cannot execute shell %s\n", shell);

    /* NOTREACHED */
    return(EXIT_FAILURE);
}

"stderr.h"ヘッダーと ' err_*'ルーチンは、私がどこでも使用するエラー報告パッケージです。jlss_basename()関数は、POSIXにあるようなシステムが提供するバージョンと基本的に同じ<libgen.h>です。)


2

上記の良い情報ですが、私が抱えていた問題と見つけた解決策についていくつかの詳細を共有すると思いました。

必要性:OSX 10.8(ML)のPATHにディレクトリを追加します。

問題:多くの場合、ガイダンスは「ホームディレクトリの.profileを変更する」ことです。デフォルトでは、このファイルはOSX上に存在しないため、少し混乱します。exportディレクトリを追加して新しいディレクトリを既存のPATHに追加すると...が機能しないため、二重に混乱します。上記でカバー。

解決策:export文を.bash_profile(ホームディレクトリ内)に追加しました。

この猫の皮を剥ぐ方法はたくさんあると思います。これは私のために働いた。やや自信を刺激します。.bash_profileはすでに存在しており、インストールされている他のソフトウェア(Rubyなど)によって変更されていることがわかりました。より良い解決策があれば、私はそれについて聞いてうれしいです!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.