AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1411833
Accepted
MDeBusk
MDeBusk
Asked: 2022-06-02 19:19:11 +0800 CST2022-06-02 19:19:11 +0800 CST 2022-06-02 19:19:11 +0800 CST

~/.profile 和 ~/.bashrc 中有什么内容?

  • 772

我很难理解属于什么~/.profile和属于什么~/.bashrc。

从我读过的内容来看,在我看来~/.profile应该用于环境变量和~/.bashrc别名、函数等。如果我将我的所有export陈述从~/.bashrc移到~/.profile,一切都会按原样工作,还是我要破坏某些东西?

(如果您想查看这两个文件,这是我的 dotfiles存储库。)

编辑 2022-06-03:我已经将我的大部分环境变量从~/.bashrcto 移到~/.profile并确保自己知道~/.bash_profilesources ~/.profile. 我留下的唯一环境变量~/.bashrc是那些仅在我在 shell 中工作时才重要的环境变量,例如,与 less、提示、slrn 等有关的环境变量。一切似乎都运行良好。谢谢您的帮助。

bashrc
  • 3 3 个回答
  • 2756 Views

3 个回答

  • Voted
  1. Best Answer
    chepner
    2022-06-03T05:46:09+08:002022-06-03T05:46:09+08:00

    它有助于了解在何时以及为什么获取哪些文件。

    .profile由启动时的登录 shell 提供。通常,您启动的唯一登录 shell 是您登录时启动的登录 shell,但您可以随时使用bash -l. (另外,在 macOS 上,没有初始登录 shell,因此终端仿真器倾向于为每个新窗口运行一个登录 shell。)

    .profile是设置环境变量的理想场所,这些环境变量可以被从登录 shell 启动的任何程序继承。

    .bashrc另一方面,它是由非登录交互式 shell 提供的,例如由终端窗口启动的那些。您可以在此处设置特定于交互式 shell 的东西,这些东西不是从父进程继承的。例如,PS1这里设置是因为只有交互式 shell 关心它的值,任何交互式 shell.bashrc无论如何都会 source,所以不需要定义和导出PS1from .profile。

    尽管您没有问,但值得指出.profile和之间的区别.bash_profile。.profile被所有 POSIX shell(例如dash)“共享”,所以不要bash在这里放任何特定的东西。.bash_profile但是,仅由 使用bash,因此您可以bash在其中使用扩展名。如果.bash_profile存在,.profile将被忽略,因此如果出于任何原因您想同时使用两者,您可以添加. ~/.profile到.bash_profile.

    • 26
  2. Terrance
    2022-06-02T19:49:16+08:002022-06-02T19:49:16+08:00

    ~/.profile仅在您首次登录帐户时调用。您在此之后所做的任何更改,明智的做法是注销并重新登录,以便设置生效。 ~/.bashrc每次启动终端窗口时都会调用。还有另一个profile文件,它在/etc/目录中。两者的主要区别在于,/etc/profile当任何人登录系统~/.profile时调用,而只有用户登录时调用。

    如果您的export行仅在终端会话中使用,那么我会将它们添加到~/.bashrc文件中,因为它们仅在终端(bash)会话期间有效。但是,如果您希望它们在有或没有打开终端的情况下存在,请将它们添加到~/.profile文件中,但就像@chepner 所说的那样,不要将特定于 bash 的命令放在~/.profile文件中。

    如果您搞砸了这些文件,则/etc/skel/目录中存储有默认文件,您可以将这些文件复制回您的主目录。此外,/etc/skel/当您启动到 LiveUSB/CD/DVD 时,也会使用这些文件,因此如果您在实时媒体上修改这些文件,然后当它完成启动时,您可以设置自己的变量。

    • 13
  3. cjs
    2022-06-03T19:10:39+08:002022-06-03T19:10:39+08:00

    chepner 的回答涵盖了总体原则。您还需要注意其他一些细微之处。

    首先,即使是交互式的,登录 shell 也不会提供源代码。.bashrc因此,您可能需要一个.bash_profile包含如下代码的代码:

    interactive() { [[ $- = *i* ]]; }
    interactive && . $HOME/.bashrc || echo 1>&2 "ERROR: .bashrc failed with retval $?"
    

    这不会对控制台登录到图形环境产生太大影响,但会对文本控制台或 ssh 登录产生很大影响。

    您不一定需要进行交互式测试;实际上,我.bashrc什至为非交互式 shell 采购(尽管在某些情况下这可能不是一个好主意)。

    请注意,如果您也使用非 Bash shell,您还需要一个.profile带有您想要的任何环境变量等的 a。.profile当您拥有 时, Bash 会忽略您的.bash_profile,但当然后者可以获取前者。


    并非每个新登录(即不是由您的用户 ID 而是由已验证您身份的根进程创建的 shell)都被视为“登录 shell”。特别是,向 ssh 调用 ( ssh somehost.example.com 'echo $-') 发出命令将不是“登录 shell”,并且//.bash_profile不会被获取。这是一个表格,显示了被认为是“登录”或交互式 shell 以及为各种调用执行的内容.bash_login.profile

    状态 调用
    登录 ( L ) argv[0][0] == '-',--login
    互动(一) -i, 标准输入是 tty
    遥控器(R) stdin 是“网络连接”(见下文)
    • '•' = 设置;空白=未设置;'-' = 未检查或不在乎。
    • inh:从父级继承环境(除了 init);即,这不是“新登录”,父母可能希望环境保持不变。
    • p : 来源/etc/profile 然后是~/.bash_profile, ~/.bash_login,~/.profile
    • rc : 来源/etc/bash.bashrc然后~/.bashrc
    大号 我 R 英 p rc 例子
    • • - • ssh host.com(sshd 设置 argv[0]="-bash")
    • - • ssh host.com </dev/null(sshd 设置 argv[0]="-bash")
    • • • bash -i,bash在 tty 上
    • bash hello.sh, bash -c echo foo,
    • • ssh host.com 'echo $-'(ssh 运行bash -c 'echo $-)

    该表来自本文档;那里有一些可能也有用的进一步信息。(任何觉得这个答案应该有什么东西的人都应该随时编辑并复制它。)

    • 8

相关问题

  • 别名:.bash_rc、.bash_aliases 和 /usr/local/bin 之间的区别

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve