小编Xle*_*lee的帖子

为什么是“登录”外壳而不是“非登录”外壳?

我对*nix 系统中的dotfiles有一个基本的了解。但是我仍然对登录外壳和非登录外壳之间的区别感到很困惑

一堆不同的答案(包括多个重复)已经解决了以下要点:

  • 如何调用一个登录非登录
  • 如何检测一个登录或者非登录
  • 什么启动文件将被消耗登录或者非登录
  • man bash有关更多详细信息,请参阅文档(例如,)

答案没有告诉(以及我仍然感到困惑的事情)是:

  • 什么是用例一的登录或者非登录壳呢?(例如,我只配置zshrczsh和这足以让大多数个人开发的要求,我知道这不是这么简单什么vimrcvim

  • 非登录shell上使用登录原因是什么(除了消耗不同的启动文件和生命周期)?

shell login terminology unix-philosophy

47
推荐指数
1
解决办法
7358
查看次数

$PATH 中的查找在幕后如何工作?

网络上有太多文章/资源教人们如何设置环境变量,PATH以便他们可以使用javapython等的简写代替命令行界面中的绝对路径。

我想知道的是,当我们输入命令并按回车键时,幕后发生什么(类似于在浏览器中输入 URL 时发生的情况)。

这是我的猜测:

  1. 读取命令(解析/预处理标准输入以获得正确的参数$@
  2. 命令查找
  3. 命令执行(程序启动,消耗内存,stdout/stderr 到 shell)
  4. 重新渲染通过相关环境变量(例如仿真器$PS#$PROMPT等等)

我最想弄清楚的部分是命令查找。很明显,$PATH被一些后台函数消耗掉了,用:/;作为分隔符,那么发生了什么?我们是否使用哈希表(键:文件的基本名称,值:文件的绝对目录名)将二进制文件存储在这些 PATH 或其他一些挂钩下?

注意:我最初认为它是哈希表,因为我可以用它[ -z hash [command] ]来检查当前环境中是否有命令可用,但是当我使用时,hash | grep python我没有从输出中得到任何东西,而which python按预期工作。(我认为该机制可能是特定于 shell 的,但我想更深入地了解它。)

shell path

9
推荐指数
1
解决办法
1852
查看次数

标签 统计

shell ×2

login ×1

path ×1

terminology ×1

unix-philosophy ×1