<分区>
如果我执行代码:
echo "printf 'working'" | sh
代码打印出 working
但是当我想以这种方式更改当前目录时:
echo "cd ../" | sh
当前目录没有改变。
您知道这种行为背后的原因吗?
你知道如何以有效的方式将 cd
命令回显到 sh
吗?
<分区>
如果我执行代码:
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——它们是 sibling !
关于linux - 将当前目录更改为 sh 的管道回显不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52681321/