bash shell 环境

原文引用https://www.dazhuanlan.com/2019/08/26/5d62f93a80696/

bash的环境配置

工作环境是在Mac环境下,默认情况下Mac下bash是没有 .bashrc 的,导致一些自动化工具没有正确
配置自己的环境变量,最后出现问题。

bash的这些配置文档作用

  • .bash_profile

    从字面理解 profile 跟账号相关,它在用户每次登录系统时被读取,里面的所有命令都会被bash执行。
    在其他shell里面,存在 .profile.login,这些都是和 .bash_profile作用是一样的。

  • .bashrc

    从字面理解 rc 跟配置项相关,每个bash启动(进程)时候,会去读该文档。一般来说都会 在.bash_profile里调用.bashrc 脚本以便统一配置用户环境。

  • .bash_logout

    就更好理解了,在退出shell时被读取。所以我们可把一些清理工作的命令放到这文档中。

同时还有一些系统级别的配置项,/etc/bashrc/etc/profile, 当在用户主目录下找不到.bash_profile.bashrc时,就会读取这两个文档,在centos下,.bashrc 又会调用 /etc/bashrc。另外 .bash_history是bash shell的历史记录文档

shell的两种交互属性

一种,是否interactive shell(交互式Shell),另一种,是否login shell(登录Shell)

  • 交互式Shell: 没有非选项参数,没有-c,标准输入和标准输出与终端相连的,或者用-i参数启动的Bash实例。可以通过探测PS1变量是否设置或者$-返回值中是否包含字幕i来判定。什么是没有非选项参数?比如bash ~/myscript/clear_temp_files.sh这样执行的Shell脚本的Bash实例,就不是交互式Shell,因为脚本的路径,就是非选项参数。-c又是干什么的?就是使用一个字符串作为Bash的传入参数,比如bash -c ‘ls -ahl’,这种Shell进程也不算是交互式Shell。

    交互式非登录Shell文档加载顺序如下:

    1
    
    2
    
    /etc/bashrc
    
    ~/.bashrc
    
  • 登录Shell: 第0个参数以-号开头的Bash实例,或者用-login参数启动的Bash Shell。更加诡异了,什么叫第0个参数以-号开头?你只要随便登录一个*nix系统,Mac也行,Linux也行,然后echo $0,你就明白了,惊讶吧,出来的值竟然是-bash。真的是以-号开头的!!

    登录Shell(不管是不是交互式的)文档加载顺序如下:

    1
    
    2
    
    3
    
    4
    
    /etc/profile
    
    ~/.bash_profile
    
    ~/.bash_login
    
    ~/.profile
    

一个crontab脚本,没经过处理的话,既不是交互式Shell,也不是登录Shell,所以所有配置都不会执行。
怎么处理?比如可以把shabang改一下 #!/bin/bash -l让脚本用登录Shell来解释执行,就可以加载/etc/profile或者,调用Bash解释器,加-l参数也可以。

上面的信息也就说明了,为什么在Mac下没有执行 .bashrc 的原因了,因为它是交互shell

shell的set和shopt命令设置

set命令可以用来定制shell环境,使用选项“o”来打开或者关闭选项。例如打开选项:set -o 选项,关闭选项目:set +o 选项。

内置set命令选项

选项名 快捷开关 含义
allexport -a 从这个选项中被设置开始就自动标明要输出的新变量或修改过的变量,直至选项被复位
braceexpand -B 打开花括号扩展,它是一个默认设置
emacs 使用emacs内置编辑器进行命令行编辑,是一个默认设置
errexit -e 当命令返回一个非零退出状态(失败)时退出。读取初始化文档时不设置
histexpand -H 执行历史替换时打开!和!!扩展,是一个默认设置
history 打开命令行历史、默认为打开
ignoreeof 禁止用EOF(Ctrl+D)键退出shell。必须键入exit才能退出。等价于设置shell变量IGNOREEOF=10
keyword -k 将关键字参数放到命令的环境中
interactive-comments 对于交互式shell,把#符后面的文本作为注释
monitor -m 设置作业控制
noclobber -C 防止文档在重定向时被重写
noexec -n 读命令,但不执行。用来检查脚本的语法。交互式运行时不开启
noglob -d 禁止用路径名扩展。即关闭通配符
notify -b 后台作业完成时通知用户
nounset -u 扩展一个未设置的变量时显示一个错误信息
onecmd -t 在读取和执行命令后退出
physical -P 设置时,在键入cd或pwd禁止符号链接。用物理目录代替
privileged -p 设置后,shell不读取.profile或ENV文档,且不从环境继承shell函数,将自动为setuid脚本开启特权
verbose -v 为调试打开verbose模式
vi 使用vi内置编辑器进行命令行编辑
xtrace -x 为调试打开echo模式

shopt命令是set命令的一种替代,很多方面都和set命令一样,但它增加了很多选项。可有使用-p选项来查看shopt选项的设置。-u开关表示一个复位的选项,-s表示选项当前被设置。

1

2

3

4
[[email protected] ~]

[[email protected] ~]

shopt -s cdspell

[[email protected] ~]# shopt -u cdspell    #恢复cdspell设置

shopt命令选项

选项 含义
cdable_vars 如果给cd内置命令的参数不是一个目录,就假设它是一个变量名,变量的值是将要转换到的目录
cdspell 纠正cd命令中目录名的较小拼写错误。检查的错误包括颠倒顺序的字符,遗漏的字符以及重复的字符。如果知道一处修改,正确的路径就打印出,命令将继续。只用于交互式shell
checkhash bash在试图执行一个命令前,先在哈希表中寻找,以确定命令是否存在。如果命令不存在,就执行正常路径搜索
checkwinsize bash在每个命令后检查窗口大小,如果有必要,就更新LINES和COLUMNS的值
cmdhist bash试图将一个多行命令的所有行保存在同一个历史项中。这使得多行命令的重新编辑更方便
dotglob bash在文档名扩展的结果中包括以点(.)开头的文档名
execfail 如果一个交互式shell不能执行指定给exec内置命令作为参数的文档,它不会退出。如果exec失败,一个交互式shell不会退出
expand_aliases 别名被扩展。默认为打开
extglob 打开扩展的模式匹配特征(正常的表达式元字符来自Korn shell的文档名扩展)
histappend 当shell退出时,历史清单将添加到以HISTFILE变量的值命名的文档中,而不是覆盖文档
histreedit 如果readline正被使用,用户有机会重新编辑一个失败的历史替换
histverify 如果设置,且readline正被使用,历史替换的结果不会立即传递给shell解析器。而是将结果行装入readline编辑缓冲区中,允许进一步修改
hostcomplete 如果设置,且readine正被使用,当正在完成一个包含@的词时bash将试图执行主机名补全。默认为打开
huponexit 如果设置,当一个交互式登陆shell退出时,bash将发送一个SIGHUP(挂起信号)给所有的作业
interactive_comments 在一个交互式shell中,允许以#开头的词以及同一行中其他的字符被忽略。默认为打开
lithist 如果打开,且cmdhist选项也打开,多行命令将用嵌入的换行符保存到历史中,而无需在可能的地方用分号来分隔
mailwarn 如果设置,且bash用来检查邮件的文档自从上次检查后已经被访问,将显示消息“The mail in mailfile has been read”
nocaseglob 如果设置,当执行文档名扩展时,bash在不区分大小写的方式下匹配文档名
nullglob 如果设置,bash允许没有匹配任何文档的文档名模式扩展成一个空串,而不是它们本身
promptvars 如果设置,提示串在被扩展后再经历变量和参量扩展。默认为打开
restricted_shell 如果shell在受限模式下启动就设置这个选项。该值不能被改变。当执行启动文档时,不能复位该选项,允许启动文档发现shell是否是受限的
sourcepath 如果设置,source内置命令使用PATH的值来寻找包含作为参数提供的文档的目录。默认为打开
source 点(.)的同义词
shift_verbose 如果该选项设置,当移动计数超过位置参量个数时,shift内置命令将打印一个错误消息

原文地址:https://www.cnblogs.com/petewell/p/11410435.html

时间: 2024-08-10 17:26:25

bash shell 环境的相关文章

linux基础——bash shell环境配置

想要用好bash shell,首先得搞清楚bash shell环境的配置,只有配置好了,我们用起来才会得心应手,要想配置好,必须了解清楚bash配置文件的类型,再根据实际需求做一些相应的添加或修改就可以了.一.bash的配置文件(一)按生效范围划分:全局配置.个人配置 1.全局配置:  /etc/profile  /etc/profile.d/*.sh  /etc/bashrc 2.个人配置:  ~/.bash_profile  ~/.bashrc (二)按功能划分:profiile类.bash

bash shell环境变量

$* 将所有命令行参数当做单个文本值包含 [email protected] 将所有命令行参数当做独立的文本值包含 $# 命令行参数数目 $? 最近使用的前端进程的退出状态码 $- 当前命令选项标记 $$ 当前shell的进程ID(PID) $! 最近执行的后台进程PID $0 来自命令行的命令名称 $_ shell的绝对路径名 BASH 用来调用shell的全文件名 BASH_ARGC 当前子函数中的参数数目 BASH_ARGV 含有所有指定命令行参数的数组 BASH_COMMAND 当前正在

几句话说清Bash Shell环境变量

一.环境变量的种类 环境变量在Linux系统中的重要性不必多说,以下就以CentOS7为例,详细阐述系统的环境变量.当用户登录Linux系统启动一个bash shell时,系统默认会在几个文件中查找命令,这些文件就被称为环境文件.bash shell查找的环境文件取决于启动bash shell的方式.bash shell的启动方式可分为以下3种: 1. 用户登陆时作为默认登陆shell. 2. 作为非登陆shell的交互式shell(比如登陆后通过bash启动的子shell). 3. 作为运行脚

Bash Shell 小试牛刀

一.终端打印 [[email protected] ~]# echo welcome to bash! welcome to bash! [[email protected] ~]$ echo 'welcome to bash!' welcome to bash! [[email protected] ~]$ echo "welcome to bash\!" welcome to bash\! (注意,双引号内不能直接用特殊符号,需要用转义符\) [[email protected]

bash shell的基本概述与操作

 Bash shell的基本操作与概念 特殊的shell变量 除了用户自定义的变量以外,在linux系统和bash shell环境中还有一些特殊的变量-环境变量,位置变量,预定义变量.下面分别进行介绍 环境变量 环境变量指的是出于运行需要而由linux系统提前创建的一类变量,主要用于设置用户的工作环境,包括用户的宿主目录,命令查找路径,用户当前目录,登录终端等.环境变量的值由linux系统自动维护,会随着用户状态的改变而改变. 使用env命令可以查看到当前工作环境下的环境变量,对于一些常见的环境

Linux编程 12 (默认shell环境变量, PATH变量重要讲解)

一 .概述 默认情况下, bash shell会用一些特定的环境变量来定义系统的环境.这些默认环境变量可以理解是上篇所讲的系统全局环境变量. 1.1 bash  shell支持的Bourne变量 Bourne shell 是 UNIX 最初使用的 shell.下面例举几个常用的变量名. 变量名 描述 HOME 当前用户的主目录 PATH Shell查找命令的目录列表,由冒号分隔 PS1 Shell命令行界面的主提示符 PS2 Shell命令行界面的次提示符 如下图所示:使用echo 输出该变量名

linux文件管理之bash shell

BASH Shell 对文件进行管理 ========================================================创建.复制.删除.移动.查看.编辑.压缩.查找 内容提要:Linux目录结构文件定位 路径文件管理 一.Linux目录结构Windows: 以多根的方式组织文件 C:\ D:\ E:\Linux: 以单根的方式组织文件 / /目录结构: FSH (Filesystem Hierarchy Standard)[root@localhost ~]# l

Bash shell使用环境的终端的环境设置:stty

Bash shell使用环境的终端的环境设置:stty stty -a 将当前所有的stty参数列出来 intr:给正在运行的程序发送中断信号 quit:给正在运行的程序发送退出信号 erase:向前删除字符 kill:删除命令行上的文字 eof:文件结束,输入结束 start:重启暂停的输出 stop:停止当前的输出 susp:给正在运行的程序发送一个终端停止信号 rprnt:输入命令时提示使用过的历史命令 werase:删除命令行的最后一个字 ^可以理解为Ctrl键,所以intr的快捷键就是

第十一章、认识与学习 BASH Bash Shell 的操作环境

Bash Shell 的操作环境: 配置值分为系统整体配置值与各人喜好配置值, 仅是一些文件放置的地点不同! 路径与命令搜寻顺序 一个命令 (例如 ls) 被下达时, 到底是哪一个 ls 被拿来运行? 以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』: 由 alias 找到该命令来运行: 由 bash 内建的 (builtin) 命令来运行: 透过 $PATH 这个变量的顺序搜寻到的第一个命令来运行. 可以发现ls有颜色但是/bin/ls则没有颜色. 因为 /bin/ls