• Linux回顾【2】shell


    依次运行一系列命令

    • 命令列表 pwd; ls; cd ..; pwd 将一组命令组合在一起依次运行。
    • 进程列表 (pwd; ls; cd ..; pwd) 会生成一个子shell来执行括号中的命令组合。
    • 如果不想创建子shell,又想将多个命令分组,使用花括号{pwd; ls; cd ..; pwd}.

    特殊变量 $BASH_SUBSHELL

    • 用于显示是否是子shell (pwd ; (echo $ZSH_SUBSHELL)).
    • 对于脚本,常用子shell进行多进程处理;但对于交互式CLI,无法进行真正的多进程处理,因为终端控制了子shell的I/O。

    在交互式命令行中的子shell用法

    1. 使用与符号& (ampersand)让命令进入后台运行

    • sleep 5 & 返回后台作业号和进程号 [background job id] PID [1] 33711.

      jobs

      • 显示所有后台进程
      • -l 增加显示后台进程的PID

    2. 使用与符号和列表将子shell放到后台运行

    • (sleep 2; echo $ZSH_SUBSHELL; sleep 2) & 此命令立即返回[1] 33760,等待2秒,显示➜ ~ 1,再过2秒, 显示[1] + 33760 done ( sleep 2; echo $ZSH_SUBSHELL; sleep 2; ).
    • 再次过程中可以一直输入其他命令,且子shell的I/O也不会受制于终端输入。

    3. coproc 协程

    • 在后台生成子shell,并在其中执行命令。
    • coproc sleep 2sleep 2 &等效.

    shell的内建命令和外部命令

    区分

    • type -a cmd
    • 有些命令既有外部也有内建实现。

    外部命令

    • 其存在于shell程序之外,执行时会创建出(fork)一个子进程

    内建命令

    • 不需要shell以外的文件执行,不需要子进程来执行。
    • history 显示最近用过的命令列表,历史记录存放于 .bash_history中,保存数量由 HISTSIZE环境变量控制,history -a在退出会话前强制写入历史。
    • alias -p 查看当前所有命令别名;alias li = 'ls -li' 创建新的别称,但仅在其所被定义的shell进程中才有效。

    环境变量

    1. 显示环境变量

    • env 或者 printenv 命令查看全局环境变量;set 显示所有环境变量(全局、局部、用户自定义)。
    • 显示某个环境变量: env HOME 或者 echo $HOME

    2. 自定义环境变量

    • 所有系统环境变量名均用大写字母,所有自定义环境变量名均用小写字母
    • 创建局部自定义环境变量:abc=2, abc=Hello,但当包含空格时,必须用引号:abc="Hello World"
    • 等号两侧不能包含空格
    • 创建全局自定义环境变量: abc="Hello World", export abc.
    • 删除环境变量 unset abc.

    3. PATH 环境变量

    • PATH 变量定义了用于进行命令和程序查找的目录,所有在shell中输入的外部命令必须能在PATH中找到才能执行。
    • PATH 中的各个目录用冒号 : 分隔,在添加搜索路径时,需要先引用现有的PATH的值,再在其后添加新的目录:PATH=$PATH:/abc/efg.

    4. 环境变量与shell

    • 交互式shell:只会检查 ~/.bashrc 文件,此文件会检查 /etc/bashrc 文件,并提供用户自定义变量的空间。
    • 非交互式shell (脚本): echo $BASH_ENV ,shell脚本启动时,会检查此变量;如果未设置此变量,则继承父shell导出的变量。

    5. 数组变量

    • array=(one two three).
    • echo ${array[1]}, echo ${array[*]}
  • 相关阅读:
    jQuery File Upload 文件上传插件使用一 (最小安装 基本版)
    JS代码优化及技巧
    autocomplete.jquery 点击或进入默认显示所有结果
    JS学习 函数的理解
    JS学习 用 arguments 对象模拟函数重载
    underscore.js 分析 第一天
    PEB(Process Environment Block)
    TEB(Thread Environment Block)
    NTSTATUS.H
    Hydra总结
  • 原文地址:https://www.cnblogs.com/mrlonely2018/p/16064011.html
Copyright © 2020-2023  润新知