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