执行 ./xxx.sh 后发生了什么

问题描述

有下面一段 shell 脚本

ubuntu>echo xxx.sh
#!/bin/bash 
echo 'hello world'
ubuntu>chmod a+x xxx.sh 
ubnutu>./xxx.sh 

当输入 ./xxx.sh` 回车后,发生了什么?

问题分析

这里涉及到 bash 脚本的执行过程。其实我们在命令行中数据只是一个一个的字符串,这些字符串会交给 bash 程序处理。

  1. 先检查 alias(别名)配置中是否有对应的命令别名。如果命令别名存在,则执行,否则执行 2 .
  2. 查询内建命令,如果内建命令中存在,则执行,否则执行 3 .
  3. 在 PATH 路径中查找命令,如果 PATH 路径中找到了,则执行,否则保存,-bash:某某命令: command not found

扩展

  • 如何查看命令的类型——也就是如何判断一个命令是 alias 别名还是内建命令还是PATH 里面配置的命令。
  • 大家都知道,在 Linux 中式没有文件后缀名字的,那么 Linux 如何区分文件类型的呢?记住there is shell , there is way ,这就是 file 命令。

从 man type 中可以看到命令可以分问四类:

  • alias
  • keyword
  • function
  • builtin

请看:

[centos]$ type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls

-a 选项会从 alias shell-builtin PATH 中全部找出来。

file 会按照 systemfile test/magic test/language test 的顺序检测文件类型。
所以我们在写脚本的时候最好在最前面加上:

#!/bin/bash 

shell 脚本的三种调用方式

调用 shell 脚本有三种方式:

  • ./xxx.sh
  • bash xxx.sh or sh xxx.sh
  • . xxx.sh or source xxx.sh
shell 脚本的执行方式shell 文件是否需要执行权限是否启动新的进程
./xxx.sh
. xxx.sh or source xxx.sh
bash xxx.sh or sh xxx.sh
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值