V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ch4ng13
V2EX  ›  macOS

OS X ML (10.8) Terminal 下 su 之后 .bash_profile 设置无效

  •  
  •   ch4ng13 · 2012-11-08 20:57:46 +08:00 · 7879 次点击
    这是一个创建于 4396 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题。请问各位这个问题要如何解决?

    我现在是每次 su 之后手动执行一下 source ~/.bash_profile 太烦了。
    16 条回复    1970-01-01 08:00:00 +08:00
    alexrezit
        1
    alexrezit  
       2012-11-08 21:10:43 +08:00
    在 etc 里面设置 global 的.
    killpanda
        2
    killpanda  
       2012-11-08 21:11:18 +08:00
    开启启动然后登录到 root 用户下,设置一下配置文件?
    ch4ng13
        3
    ch4ng13  
    OP
       2012-11-08 21:19:36 +08:00
    @alexrezit 可否说详细一些?

    @killpanda 我先试试在 CLI 下能否解决这个问题。
    gavingeng
        4
    gavingeng  
       2012-11-08 22:41:07 +08:00
    su到root用户的shell是/bin/sh,通过chsh来修改shell

    Login: root
    Uid [#]: 0
    Gid [# or name]: 0
    Generated uid:
    Home directory: /var/root
    Shell: /bin/bash
    Full Name: System Administrator
    Office Location:
    Office Phone:
    Home Phone:

    修改/etc/passwd root的shell为/bin/bash
    ch4ng13
        5
    ch4ng13  
    OP
       2012-11-08 23:10:44 +08:00
    @gavingeng 之前注意到了这个区别。按你说的用

    # chsh -s /bin/bash

    改掉了 root 默认的 shell,但问题仍没有解决。我比较了 osx 与 debian su 之后 export 出来的环境变量的区别:在 osx 上 su 之后 $USER 仍为之前的用户帐号;而在 debian 上 su 之后,UID 直接就变成 0 了。

    根据 su man page (osx) 上所说,su 之后 UID 能不能切为 0 (root),关键看当前的用户是否在 admin 或 wheel 组里。而我的当前的帐号确定已经在 admin 组里了。

    所以我之前考虑的方向一直是 /etc/pam.d/su 里动作。(可能钻到牛角尖里去了)
    ch4ng13
        6
    ch4ng13  
    OP
       2012-11-08 23:44:09 +08:00
    这个问题有些诡异啊。

    1 在上一帖中说到,将 root 的 SHELL 改成 bash 了。。。。然后又试着将 .bash_profile 改名为 .bashrc,现在的自定义设置全部生效了。

    2 我用 ch4ng13 这个帐号开机登录系统,打开 Terminal.app ,默认的 SHELL 是 bash,这时所有的自定义设置放在 .bashrc 这个文件里无效,只有放在 .bash_profile 才有效。

    3 在 (1) 成功后,我又将 (2) 的 .bash_profile 也改成 .bashrc,这时的自定义设置一如之前,还是无效的。

    4 这太让人纠结了 ???
    alexrezit
        7
    alexrezit  
       2012-11-08 23:49:37 +08:00
    @ch4ng13 .bash_profile 和 .bashrc 的作用是不同的, 建议搜索一下相关资料.
    sinxccc
        8
    sinxccc  
       2012-11-08 23:54:14 +08:00
    Try 'su -'
    cabbala
        9
    cabbala  
       2012-11-09 00:01:03 +08:00
    @ch4ng13 osx 下bash的行为和Linux下不太一样的,一般linux都是去写.bashrc,但是osx下要去写.bash_profile
    sinxccc
        10
    sinxccc  
       2012-11-09 00:24:05 +08:00
    @cabbala 这是 login shell 和 普通 shell 的差别,什么系统都一样。Linux 下只要写 .bashrc 是因为它在默认的 profile 文件里引用 bashrc 了
    ch4ng13
        11
    ch4ng13  
    OP
       2012-11-09 00:31:45 +08:00
    @sinxccc 这个命令好用。进去后 $USER 直接就是 root;.bash_profile 也有动作了(.bashrc 又不行了,据说这在 BSD-like OS 才是正常的)。

    一并谢过参与讨论各位!
    ch4ng13
        12
    ch4ng13  
    OP
       2012-11-09 00:37:56 +08:00
    是的,~/.bashrc, ~/.bash_profile 默认行为的差异,与 /etc/bashrc, /etc/profile, ... 等直接相关,不过这里面的坑好多,现在暂时没空去细究。
    haha1903
        13
    haha1903  
       2012-11-09 07:51:38 +08:00
    su -, su - user 就可以了
    muxi
        14
    muxi  
       2012-11-09 09:55:34 +08:00
    sudo -i
    hewigovens
        15
    hewigovens  
       2012-11-09 10:44:47 +08:00
    我一般是在/etc/bashrc里添加一条:source ~/.bashrc
    graypants
        16
    graypants  
       2013-07-05 19:25:11 +08:00
    我也碰到类似问题,google到此处,并没能解决问题,最后发现root账户在~/.profile中设置别名就ok了...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5180 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:54 · PVG 13:54 · LAX 21:54 · JFK 00:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.