如果我输入代码:
echo "printf 'working'" | sh
代码将打印出working
但是当我想以这种方式更改当前目录时:
echo "cd ../" | sh
当前目录未更改。
您知道该行为背后的原因吗?
您知道如何以一种有效的方式向cd
回显sh
命令吗?
答案 0 :(得分:1)
echo "cd /" | sh
实际上创建了两个新过程: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-它们是兄弟姐妹!