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

时间:2018-10-06 16:56:55

标签: linux shell command-line-interface echo concurrentdictionary

如果我输入代码:

echo "printf 'working'" | sh

代码将打印出working

但是当我想以这种方式更改当前目录时:

echo "cd ../" | sh

当前目录未更改。

您知道该行为背后的原因吗? 您知道如何以一种有效的方式向cd回显sh命令吗?

1 个答案:

答案 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-它们是兄弟姐妹!