关于LFS建议的设置,我有一些问题。
问题:
<< " EOF“exec env -i HOME=$HOME TERM=$TERM PS1=‘u:\W$ /bin/bash
其中大部分内容都得到了很好的解释,但对于本节来说,它可能比我预期的更具有技术性,它还涉及到一些我想更详细地理解的重要概念。我用粗体标明了一些命令,我无法理解他们在做什么。
来自:http://www.linuxfromscratch.org/lfs/view/stable/chapter04/settingenvironment.html
通过为bash创建两个新的启动文件来建立一个良好的工作环境。在以用户lfs身份登录时,发出以下命令以创建新的.bash_profile:
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文件:
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
EOFset +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节“工具链技术说明”。
最后,要使环境为构建临时工具做好充分准备,请提供刚刚创建的用户配置文件:
source ~/.bash_profile发布于 2014-07-24 07:39:29
请参阅Bash启动文件
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进程。另一方面,env是exec的bash,所以它就像over一样--所有旧的shell都被转换为新的bash,但是进程ID仍然是相同的。
https://stackoverflow.com/questions/24926816
复制相似问题