最近在学习shell脚本,写了一个简单的demo,想要实现的是cd一个文件夹然后再创建文件,可是执行了shell脚本的时候,却发现cd命令没有生效。导致我的文件夹和文件都没有创建
# !/bin/bash
read -p "请输入文件夹的名字:" dirName
if [ -e $dirName ];then
echo "$dirName 是存在的即将进入文件夹"
cd $dirNamem
echo "即将创建文件名为test"
touch test.c
else
echo "该文件夹不存在,即将创建文件夹"
mkdir $dirName
echo "即将进入$dirName 文件夹中"
cd $dirName
去查了一下资料,发现了这是因为shell在执行脚本时,会创建一个子shell,并在子shell中逐个执行脚本中的指令; 而子shell中从父shell中继承了环境变量,但是执行后不会改变父shell的环境变量
我使用了两种方法去使我的cd生效
- 使用source命令
在执行shell脚本时,不使用 ./XXX.sh。而是使用source xxx.sh的方法,这个会创建文件,但直接回到了~目录(没有解决cd不) - 在cd后面增加exec /bin/bash
这个指令是指bash脚本在其当前环境或其子级环境上运行,但不在其父级环境上运行