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

标签 linux shell command-line-interface echo concurrentdictionary

<分区>

如果我执行代码:

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/

相关文章:

bash - ssh-在初始连接上执行时,echo $ SSH_CLIENT返回空

bash - bash 中的 if else 语句

linux - FISH:如何在启动 Fish 时设置特定的 $fish_function_path?

shell - vagrant puppet 配置的功能测试(或运行 CLI 测试套件)

linux - 意外删除位于/usr/include/GL 的 GL 文件夹

linux - 检查视频文件是否有字幕

mysql - 在perl中将csv上传到mysql

linux - 如何将包含引号和空格的变量作为单个参数的一部分传递给命令

angular - 路由器导航使用 CreateUrlTree

python - 在cmd中使用帮助时如何过滤命令?