1

可能重复:
为什么“cd”在 bash shell 脚本中不起作用?

为什么反引号或 $(..) 中的 cd 命令永远不会更改到新目录。任何想法如何在单个命令中执行此操作,即捕获任何错误并更改目录。

[root@linux ~]# pwd
/root
[root@linux ~]# cmdMsg=`cd /tmp 2>&1`
[root@linux ~]# pwd
/root
4

4 回答 4

3

因为反引号产生一个单独的进程并单独运行。因此它会在该进程中执行 cd,但不会更改您当前进程的工作目录。

如果您只需要查看命令是否成功并且想要更改目录,则可以检查它的退出代码:

cd /tmp
retval = $?

if [ $retval -gt 0 ]; then
    echo "cd failed"
fi
于 2012-10-23T15:28:21.913 回答
0

因为它 cd 在您打开以运行 cd 的新 shell 的上下文中,请尝试例如:

cmdMsg=`cd /tmp; pwd`
echo $cmdMsg

它会告诉你你在 /tmp

于 2012-10-23T15:28:27.393 回答
0

;如果要在单个命令中运行所有命令,请使用 with 分隔命令。

例如:

cd /; ls; cd ~; ls; cd /var; ls

但是您的问题是 cd 在新生成的外壳中运行,这不会影响您当前的外壳。

于 2012-10-23T15:29:35.893 回答
0

子进程不能改变其父进程的环境。

pwd
`cd /tmp 2>&1`
pwd
  1. 打印当前进程中的工作目录。
  2. 创建一个新的子进程。
  3. 切换到子进程内的目录 /tmp(同时将 stderr 重定向到 stdout)。
  4. 退出子进程。
  5. 打印当前进程中的工作目录。
于 2012-10-23T15:35:08.857 回答