为什么反引号或 $(..) 中的 cd 命令永远不会更改到新目录。任何想法如何在单个命令中执行此操作,即捕获任何错误并更改目录。
[root@linux ~]# pwd
/root
[root@linux ~]# cmdMsg=`cd /tmp 2>&1`
[root@linux ~]# pwd
/root
因为反引号产生一个单独的进程并单独运行。因此它会在该进程中执行 cd,但不会更改您当前进程的工作目录。
如果您只需要查看命令是否成功并且想要更改目录,则可以检查它的退出代码:
cd /tmp
retval = $?
if [ $retval -gt 0 ]; then
echo "cd failed"
fi
因为它 cd 在您打开以运行 cd 的新 shell 的上下文中,请尝试例如:
cmdMsg=`cd /tmp; pwd`
echo $cmdMsg
它会告诉你你在 /tmp
;
如果要在单个命令中运行所有命令,请使用 with 分隔命令。
例如:
cd /; ls; cd ~; ls; cd /var; ls
但是您的问题是 cd 在新生成的外壳中运行,这不会影响您当前的外壳。
子进程不能改变其父进程的环境。
pwd
`cd /tmp 2>&1`
pwd