.profile ve .bashrc Mac'imde çalışmıyor


29

Bu problem uzun süredir var. Terminal çalıştırdıktan sonra .profile ve .bashrc dosyası çalışmaz (çalıştırılmaz). Nerede bir problem kaynağı aradığımı gösterebilir misiniz?


Bu dosyaların uygun izinleri olup olmadığını kontrol edin

evet ... haklısın, neden gerçekten aptaldı - yanlış izinler chmod + x ~ / .profile ve her şey iyi çalışıyor.

5
@ xTrol: Bu mantıklı ~/.profiledeğil, yürütme izni gerektirmez. (Kabuk onu besler, çalıştırmaz). Deneyin chmod -x ~/.profileve hala çalışıp çalışmadığına bakın.
Keith Thompson

Yanıtlar:


40

Koşmamamda da benzer bir sorun vardı .profile. Görünüşe göre ( bu Apple StackExchange cevabında açıklandığı gibi ) varsa .bash_profileveya .bash_logindosyalarınız varsa, .profilebash tarafından göz ardı edilir.


2
Sorunum, otomatik olarak .profile çalışmamasına neden olan bir .bash_profile dosyası oluşturan Python'u yüklemekti.

5
Bu cevap bana yardımcı oluyor. .bash_loginkurulduktan sonra eklendi rvm.

17

Sanırım bu soru-cevap Superuser’e gitmeli ama yine de:

Man sayfasının DAVRANIŞ bölümüne göre ,

  • /etc/profileve ~/.profileetkileşimli bir giriş kabuğu için okunur ve
  • ~/.bashrc etkileşimli bir giriş olmayan kabuk için okunur.

Diğer UNIX makineniz ~/.bashrcetkileşimli bir giriş kabuğu için bile otomatik olarak okunursa, bunun nedeni sistem genelinde /etc/ profileokunan bir satır bulunmasıdır ~/.bashrc. OS X'in sistem genelinde bir tane /etc/profileyok.

Bu nedenle, ~/.bashrcetkileşimli bir giriş kabuğu için bile çalıştırmak istiyorsanız , bir satır eklemeniz gerekir.

. ~/.bashrc

senin içinde ~/.profile.


Ve buradaki eksik parçayı doldurmak için: Bir OP terminal kabuğu (OP'nin sorusu hakkında), varsayılan olarak etkileşimli bir oturum açma kabuğudur.
LarsH

3

Bunları "el ile" almayı deneyin:

source ~/.profile

ve ne olduğunu görün. Diğerlerinin de belirttiği gibi, .profile giriş kabukları, .bashrc ise giriş yapmayan kabukları tarafından kaynaklanır; öyleyse ikisini birden değil deneyin.


2

Terminal tercihlerinizde 'Başlangıç' bölmesine bakın. Seçeneklerin var:

Açık deniz kabukları:

  • Varsayılan giriş kabuğu (/ usr / bin / login)
  • Komut (tam yol)

Ben 'varsayılan' seçtim ... eğer özel komut seçtiyseniz, bu bir faktör olabilir.

Kontrol edilecek bir sonraki nokta, kabuğun bir giriş kabuğu olarak başlatılıp başlatılmadığıdır. Bir psgiriş yaptığımda şunu görüyorum:

  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

Buradaki kilit nokta -, kabuk adının önünde ' '; Bu, kabuğa profilden ve ilgili şeylerden geçmesini söyler. Bunu mevcut pencerenizde görmüyorsanız, siz yapıncaya kadar ayarlarla uğraşmanız gerekebilir.

Terminal tercihlerindeki ayarlar bölmesi ayrıca bir kabuk seçeneği de listeler. Benimkinde listelenen / bin / sh var.


Buna ihtiyacın yok

En kötüsü en kötüsüne gelirse, geçmişte diğer kooperatif olmayan sistemlerde yaptığım gibi yapabilirsiniz - pencerelerden çalıştırabileceğim bir 'loginsh' programı hazırladım ve sonra da seçtiğim kabuğumu ' -' bir giriş kabuğu olarak çalışmasını söylemek için önek.

#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"Üstbilgi ve ' err_*' yordamları her yerde kullandığım bir hata raporlama paketidir. jlss_basename()İşlev temelde POSIX'te bulunan sürümlerle sağlanan sistemle aynıdır <libgen.h>.)


2

Yukarıda iyi bilgi, ancak yaşadığım sorun ve bulduğum çözümle ilgili bazı bilgileri paylaşacağımı düşündüm.

İhtiyaç: OSX 10.8 (ML) üzerindeki PATH dizinine ekleyin.

Sorun: Rehberlik genellikle "ev dizininizde .profile mod" şeklindedir. Bu dosya varsayılan olarak OSX'te bulunmadığından kafa karıştırıcı bir parça. Şaşırtıcı bir şekilde kafa karıştırıcı çünkü yeni dizini mevcut PATH'e eklemek için bir dışa aktarma ifadesi eklediğinizde ... çalışmaz. Yukarıda kaplı.

Çözüm: export deyimini .bash_profile dosyama ekledim (ayrıca ana dizinde).

Eminim bu kedinin derisini yüzmenin birçok yolu vardır. Bu benim için çalıştı. Biraz güven verici: .bash_profile zaten mevcuttu ve diğer kurulu yazılımların (örneğin Ruby) onu değiştirdiğini görebiliyordum. Daha iyi bir çözüm varsa, bunu duyduğuma sevinirim!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.