Linux下Bash命令捕获错误信息无效果?cd命令执行疑问
问题解答
你看到当前目录没变化,不是错误捕获的问题,而是
$(...)会在子shell里执行命令。子shell是独立的运行环境,它里面的cd操作只会改变子shell的工作目录,不会影响父shell(也就是你当前的终端环境),所以执行完errMsg=$(cd /dir1/dir2 2>&1)后,父shell的pwd还是原来的目录,这是正常行为。这种方式完全可以捕获命令的错误信息,你之前的例子只是因为
cd /dir1/dir2执行成功了,所以errMsg是空的,$?返回0(成功状态码),符合预期。如果命令执行失败,就能捕获到错误内容:# 目标目录不存在,命令执行失败 errMsg=$(cd /dir1/non_exist_dir 2>&1) # 输出非0的错误状态码,比如1 echo $? # 打印捕获到的错误信息,类似 "cd: /dir1/non_exist_dir: No such file or directory" echo "$errMsg"如果你想让
cd的目录切换生效(改变当前shell的工作目录),就不能用$(...)包裹cd命令,因为那样会进入子shell。可以直接执行cd,再单独捕获错误:if ! cd /dir1/dir2; then # 单独捕获错误信息 errMsg=$(cd /dir1/dir2 2>&1 >/dev/null) echo "切换目录失败:$errMsg" fi # 成功的话,此时pwd会显示/dir1/dir2
内容的提问来源于stack exchange,提问作者Senior Coder
相关产品推荐
相关产品推荐

