Mac 操作系统中shell的相关问题

Mac 操作系统中shell的相关问题

shell配置产生的问题

阅读信息:

版本:0.2.20220923

难度10:1 ~ 3

阅读时间:10 分钟

适合操作系统:10.5, 10.6, 10.8, 10.9, 10.10, 10.11, 10.12, 10.13, 10.14, 10.15, 11, 12

简介:

Mac操作系统是经The Open Group认证的符合UNIX 03规范的操作系统,业界俗称的类-Unix系统。

shell是Unix的壳层,用于人机交互的一种基于文本的交互界面,是介于Unix核心和用户之间的交互程序的总称。

每个 Mac 系统的用户都会有一个shell的设置,这个设置是在用户账户参数中的。随着Mac操作系统的更新换代,系统默认的shell也会有变化。Mac 系统自带的 shell 有:bash, csh, ksh, sh, tcsh, zsh 等,它们都在/bin目录中。系统默认使用 bash 或 zsh。用户的默认shell可以被修改。

一个用户的默认 shell 取决于Mac系统版本以及用户生成时的宿主系统。

如果是新建用户,会依据当前操作系统的版本默认设置,规则如下:

macOS 10.14 以及旧版系统,默认的是 bash,路径是/bin/bash

macOS 10.15 以及新版系统,默认的是 zsh,路径是/bin/zsh

如果是升级了操作系统的情况下,在升级之前已经存在的用户,shell 设置不会变化, 也就是说,原来是 bash,依然保持 bash。

如何确认shell

不同shell对于配置方法和命令解释不同,当遇到问题时,先确认当前的shell是什么,再针对该shell进行搜索或提问。

实际操作中,有可能有两种 shell 环境,一种是运行时的,一种是用户默认的。

确认当前进程(运行时的)正在使用的shell,可采用下面命令中的一个(后附参考资料):

echo $0

ps -p $$

确认当前用户默认shell,可采用下面命令中适当的一个:

echo $SHELL

dscl . -read /Users/$(id -un) UserShell

变更用户默认的 shell

首先,可以用下面的命令来看看 macOS 系统有哪些认可的 shell

cat /etc/shells

下面是在 macOS Monterey 12系统上列出的结果,哪些以/bin/为开始的行就是了:

# List of acceptable shells for chpass(1).

# Ftpd will not allow users to connect who are not using

# one of these shells.

/bin/bash

/bin/csh

/bin/dash

/bin/ksh

/bin/sh

/bin/tcsh

/bin/zsh

了解了可用的 shell 之后,可以用下面的命令来变更默认的 shell 了。

chsh -s /bin/dash

上面这个命令把当前用户的默认 shell 变更为了 /bin/dash了。

小贴士:如果,你的 Mac 想我一样,创建了多个账户,你可以为其它的账户变更默认 shell。很简单,就是在前面的命令后面加上要变更的用户的用户名即可。

shell 的配置

当一个 shell 启动的时候,会根据被调用方式(交互式、带有参数等等),逐步读取相应的配置文件并执行其中的命令配置运行环境等操作。

如果配置文件错误,可能导致意外后果,比如,系统无法启动、系统不稳定、系统服务无法启动、用户无法登陆、无法运行终端程序、命令运行错误等等。

系统和用户级配置文件

放置在/etc/目录中的都是系统级的。而在用户个人文件夹目录(一般用“~”或者 “$HOME”获得)中的,系统默认路径“/Users/用户名”里面的,都是用户级别的。用户应该仅自己创建用户级的配置文件。

例如 “/etc/profile” 的是系统级别,“~/.profile” 的是用户级别的。

几个基本原则:

除非必要和确认自己在做什么,否则不要修改系统级的配置文件修改配置文件要谨慎,使用适当的纯文本编辑工具给别人建议时,自己一定要测试并考虑多种情况

bash配置文件

下面是 bash 中相关的配置文件:

/etc/profile

/etc/bashrc

/etc/bashrc_Apple_Terminal

~/.bash_profile

~/.bash_login

~/.profile

~/.bashrc

zsh配置文件

下面是 zsh 中相关的配置文件:

/etc/zshenv

/etc/zprofile

/etc/zshrc

/etc/zlogin

/etc/zlogout

~/.zshenv

~/.zprofile

~/.zshrc

~/.zlogin

~/.zlogout

问题的排除步骤:

当终端或者 shell 命令出问题后,怀疑是配置文件造成的。依照上面列出的相关配置文件,先从用户级的排查。

如果不知道那里出错,使用 cat 命令把配置文件逐个列出来,把输出结果,提交或截屏或文字拷贝,以便别人帮你解读。 比如运行下面的命令,来显示 ~/.zprofile 的内容:cat ~/.zprofile

如果终端都进不去了,可以尝试用第三方应用,比如 iTerm2 等;或者在一个新建的管理员账户中操作。然后,在提问中说明自己所做的步骤,以及问题账户名称和新建账户名称,以寻求帮助。

提示:寻求帮助的时候,为了避免来回提问解答拖延时间,尽量详细说明情况,比如:macOS 版本,错误现象,错误信息,终端程序是否电放,自己采取的步骤等等,最好是图文并茂。

Apple 社区相关主题

[待更新]

----------------------------

参考资料

English:【Wikipedia-Shell 】【 Wikipedia-Unix Shell 】【The Unix Shell (github) 】【Is macOS UNIX】

Video: 【苹果电脑终端使用技巧 MacOs Terminal(bilibili)】

中文:【shell】

视频:【什么是 shell (bilibili)】【什么是shell解释器 (bilibili)】【把Mac终端命令用起来 (bilibili)】

参考文章或书籍:

【苹果的《终端使用手册》(中 | 英)】【Mac OS X For Unix Geeks (O'reilly)】

命令:

执行命令调出系统说明:`man bash` 或 `man zsh`

How to determine the current shell I'm working on (stackoverflow)

后记说明:

希望大家提出疑问和建议, 以便于本文的更新如果发现有相关的主题帖子,希望可以帖子的信息,添加到“Apple 社区相关主题”作为参考本技巧尽量提供中英文的参考资料,以便比照+参考+学习。谁有权威的资料,请告知以更新希望这个是集思广益的实用文,若我无法及时更新,版主或者其他同仁审核后更新

[链接经过版主编辑]

相关推荐

全身皮肤发黄是什么原因 365体育旧版本怎么下载
阿圭罗在卡塔尔世界杯:实至名归的阿根廷第27人? 365体育投注网址亚洲下载
连接到智能手机 365体育旧版本怎么下载

连接到智能手机

08-09 👁️ 137