将当前目录更改为 sh 的管道回显不起作用

Pipe echo of change the current directory to sh does not work

如果我执行代码:

echo "printf 'working'" | sh

代码打印出来working

但是当我想这样更改当前目录时:

echo "cd ../" | sh

当前目录未更改。

你知道这种行为背后的原因吗? 你知道如何以有效的方式将 cd 命令回显到 sh 吗?

echo "cd /" | sh

实际上创建了 2 个新进程:echo 和 sh。 sh 进程很可能确实更改了目录,但随后就退出了。你可以通过

来测试这个
echo "cd ../; touch Jimmix_was_here" | sh
ls -l ../Jimmix_was_here

应该显示空文件 Jimmix_was_here 文件,带有当前时间戳(如果您有父目录的写权限;否则第一个命令会抛出错误。)

无法从子进程中更改进程的当前目录;毕竟,如果可能的话,那将是一个安全漏洞!

注意:这让我想起了一个看似矛盾的事实:为什么/bin/cd存在?

注意 2:尝试 pstree | cat 并找到 pstree 和 cat -- 他们是兄弟姐妹!