shell脚本中cd命令不起作用

本文介绍了一种在Shell脚本中使用cd命令遇到的问题及解决方案。作者试图在脚本中切换目录并创建文件,但发现cd命令未生效。通过探究Shell的工作原理,找到了两种解决方法:使用source命令执行脚本或在cd命令后加exec/bin/bash。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学习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生效

  1. 使用source命令
    在执行shell脚本时,不使用 ./XXX.sh。而是使用source xxx.sh的方法,这个会创建文件,但直接回到了~目录(没有解决cd不)
  2. 在cd后面增加exec /bin/bash
    这个指令是指bash脚本在其当前环境或其子级环境上运行,但不在其父级环境上运行
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值