首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解LFS环境设置

了解LFS环境设置
EN

Stack Overflow用户
提问于 2014-07-24 06:46:23
回答 1查看 747关注 0票数 0

关于LFS建议的设置,我有一些问题。

问题:

  • 这个命令到底在做什么?

<< " EOF“exec env -i HOME=$HOME TERM=$TERM PS1=‘u:\W$ /bin/bash

  • 它提到“shell的新实例是一个非登录的shell”,因此我们必须设置.bashrc ....however --它并没有真正解释创建后如何使用这个bashrc。它回到了最后的bash_profile。

其中大部分内容都得到了很好的解释,但对于本节来说,它可能比我预期的更具有技术性,它还涉及到一些我想更详细地理解的重要概念。我用粗体标明了一些命令,我无法理解他们在做什么。

来自:http://www.linuxfromscratch.org/lfs/view/stable/chapter04/settingenvironment.html

通过为bash创建两个新的启动文件来建立一个良好的工作环境。在以用户lfs身份登录时,发出以下命令以创建新的.bash_profile:

代码语言:javascript
复制
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF

当以用户lfs身份登录时,初始shell通常是一个登录shell,它读取主机的/etc/profile,然后读取.bash_profile。文件中的except i./bin/bash命令用一个完全为空的环境替换正在运行的shell,除了HOME、TERM和PS1变量。确保主机系统中不需要的和潜在危险的环境变量泄漏到构建环境中。

外壳的新实例是一个非登录的shell,它不读取/etc/profile或.bash_profile文件,而是读取.bashrc文件。现在创建.bashrc文件:

代码语言:javascript
复制
cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
EOF

set +h命令关闭bash的散列函数。哈希通常是一个有用的特性-bash使用哈希表来记住可执行文件的完整路径,以避免一次又一次地搜索路径以找到相同的可执行文件。但是,新工具一安装就应该立即使用。通过关闭哈希函数,当程序运行时,shell将始终搜索路径。因此,当新编译的工具在$LFS/tools中可用时,shell将在它们可用时立即找到它们,而不会在不同的位置记住相同程序的早期版本。

将用户文件创建掩码(umask)设置为022,确保新创建的文件和目录只能由其所有者写入,但任何人都可以读取和执行(假设打开(2)系统调用使用默认模式,则新文件将以权限模式644结束,目录以模式755结束)。

LFS变量应该设置为选定的挂载点。

LC_ALL变量控制某些程序的本地化,使它们的消息遵循指定国家的惯例。如果主机系统使用大于2.2.4的Glibc版本,如果将LC_ALL设置为“POSIX”或“C”(在本章中)以外的内容,则如果退出chroot环境并希望返回稍后的,则可能会导致问题。将LC_ALL设置为“POSIX”或“C”(两者是等效的),可以确保在chroot环境中一切正常工作。

LFS_TGT变量设置一个非默认的、但兼容的机器描述,用于构建交叉编译器和链接器以及交叉编译临时工具链时使用。更多信息载于第5.2节“工具链技术说明”。

最后,要使环境为构建临时工具做好充分准备,请提供刚刚创建的用户配置文件:

代码语言:javascript
复制
source ~/.bash_profile
EN

回答 1

Stack Overflow用户

发布于 2014-07-24 07:39:29

请参阅Bash启动文件

代码语言:javascript
复制
cat > ~/.bash_profile << "EOF" exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash EOF

其中,env调用了一个新的交互式非登录bash (/bin/bash)实例,除了显式设置的环境变量(-i)。非登录bash实例不读取.bash_profile.bash_login.profile,而是读取.bashrc。但是,登录实例读取这些文件,但不读取.bashrc。由于env不将-l传递给/bin/bash,所以bash不会作为登录shell运行。

exec用env覆盖当前的shell进程。另一方面,envexec的bash,所以它就像over一样--所有旧的shell都被转换为新的bash,但是进程ID仍然是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24926816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档