admin

Shell 脚本执行方式比较
简单需求使用unrar命令批量解压当前目录下的所有.rar压缩文件并删除.rar压缩包。分析首先,不考虑使用unr...
扫描右侧二维码阅读全文
14
2019/05

Shell 脚本执行方式比较

简单需求

使用unrar命令批量解压当前目录下的所有.rar压缩文件并删除.rar压缩包。

分析

首先,不考虑使用unrar x *.rar方式,实际上我也测试了这个命令,使用手册说是x参数来批量解压,但是我这边报错:No files to extract
所以还是自己写脚本来解压吧。

撸脚本

稍加思索有了下面Shell脚本(batchunrar.sh):

#!/bin/bash

for line in `ll *.rar | awk '{print $9}'`
do
    unrar e $line
    rm -f $line
done

写完执行如下命令:

chmod +x batchunrar.sh
./batchunrar.sh

结果报错:

./batchunrar.sh: line 3: ll: command not found

很明显,说ll命令找不到,这种问题遇到也不在少数了,就是PATH环境变量的问题,但这里不是这个原因,那么我们在当前终端执行ll命令为什么又是可以的呢?

这就涉及到了Shell脚本几种执行方式的区别了:

  1. ./xxxx.sh 方式执行
  2. bash xxxx.sh 或者 sh xxxx.sh 方式执行
  3. . xxxx.sh 方式执行
  4. source xxxx.sh 方式执行

1、2两种方式执行是以新的子进程执行脚本,而上面的ll命令实际上在某些linux操作系统中是没有的,通常是在~/.bashrc或者/etc/profile中给ls命令取的别名,比如alias ll='ls -l'
所以这两种方式执行上面的脚本会报ll命令没有找到(因为新的子进程是没有加载~/.bashrc或者/etc/profile文件的)。

3、4两种方式是以当前 Shell 进程执行的,所以上面的脚本换成这两种方式执行都没有问题。

Last modification:May 14th, 2019 at 05:27 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment