.profile และ. bashrc ไม่ทำงานบน Mac ของฉัน


29

ปัญหานี้ฉันมีมาเป็นเวลานาน หลังจากรันเทอร์มินัล. profile และไฟล์. bashrc ไม่ทำงาน (จะไม่ถูกเรียกใช้) คุณช่วยระบุตำแหน่งที่ฉันควรมองหาที่มาของปัญหาหรือไม่


ตรวจสอบว่าไฟล์นี้มีสิทธิ์ที่เหมาะสม

ใช่ ... คุณพูดถูกเหตุผลโง่จริงๆ - สิทธิ์ที่ไม่ถูกต้อง chmod + x ~ / .profile และทุกอย่างทำงานได้ดี

5
@xTrol: ไม่เข้าท่า~/.profileไม่ต้องการการอนุญาตจากผู้ใช้ (เชลล์มามันไม่ทำงาน) ลองchmod -x ~/.profileดูว่ายังใช้งานได้หรือไม่
Keith Thompson

คำตอบ:


40

ฉันมีปัญหาคล้ายกันกับที่.profileไม่ได้ทำงาน ปรากฎ (ตามที่อธิบายไว้ในคำตอบ Apple StackExchange นี้ ) ว่าถ้าคุณมี.bash_profileหรือ.bash_loginไฟล์แล้ว.profileจะถูกละเว้นโดยทุบตี


2
ปัญหาของฉันคือฉันติดตั้ง Python ซึ่งสร้างไฟล์. bash_profile โดยอัตโนมัติซึ่งทำให้. profile ของฉันไม่ทำงาน

5
คำตอบนี้ช่วยฉัน ถูกเพิ่มเข้ามาหลังจากที่ผมติดตั้ง.bash_login rvm

17

ฉันเดาว่าคำถาม & คำตอบนี้ควรไปที่ Superuser แต่อย่างไรก็ตาม:

ตามที่ภาวนาส่วนของหน้าคน ,

  • /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 / ล็อกอิน)
  • คำสั่ง (เส้นทางที่สมบูรณ์)

ฉันเลือก 'ค่าเริ่มต้น' ... หากคุณเลือกคำสั่งกำหนดเองอาจเป็นปัจจัย

จุดต่อไปที่จะตรวจสอบว่าเชลล์เริ่มต้นเป็นเชลล์ล็อกอินหรือไม่ เมื่อฉันทำ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 อยู่ในรายการแล้ว


คุณไม่ควรต้องการสิ่งนี้

หากที่เลวร้ายที่สุดมาถึงที่เลวร้ายที่สุดที่คุณสามารถทำตามที่ฉันทำในบางระบบความร่วมมืออื่น ๆ ในช่วงเวลาที่ผ่านมา - ฉันสร้างโปรแกรมที่ '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

ข้อมูลที่ดีด้านบน แต่คิดว่าฉันจะแบ่งปันข้อมูลเฉพาะเกี่ยวกับปัญหาที่ฉันมีและวิธีแก้ไขที่พบ

ความต้องการ: เพิ่มไดเรกทอรีไปยัง PATH บน OSX 10.8 (ML)

ปัญหา: คำแนะนำมักจะ "แก้ไข. โปรไฟล์ในไดเรกทอรีบ้านของคุณ" ค่อนข้างสับสนตั้งแต่เริ่มต้นไฟล์นี้ไม่มีอยู่ใน OSX เพิ่มความสับสนเป็นทวีคูณเพราะเมื่อคุณเพิ่มคำสั่งส่งออกเพื่อผนวกไดเรกทอรีใหม่เข้ากับ PATH ที่มีอยู่ ... มันไม่ทำงาน ครอบคลุมด้านบน

วิธีแก้ปัญหา: ฉันเพิ่มคำสั่งส่งออกไปยัง. bash_profile ของฉัน (รวมถึงในโฮมไดเร็กทอรี)

ฉันแน่ใจว่ามีหลายวิธีในการดูแลแมวตัวนี้ อันนี้ใช้ได้สำหรับฉัน มีความมั่นใจค่อนข้างแรงบันดาลใจ:. bash_profile มีอยู่แล้วและฉันเห็นว่าซอฟต์แวร์ที่ติดตั้งอื่น ๆ (เช่น Ruby) ได้ทำการแก้ไข หากมีวิธีการแก้ปัญหาที่ดีกว่าฉันจะดีใจที่ได้ทราบเกี่ยวกับมัน!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.