You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过/bin/sh可执行的命令有哪些?为何管道传入cd命令不生效

为什么echo "cd .." | /bin/sh执行无效果

每个Linux进程都拥有独立的工作目录属性,你通过管道将命令传给/bin/sh时,系统会启动一个全新的独立sh子进程来执行传入的命令:

  • cd是shell内置命令,作用是修改当前运行它的shell进程的工作目录,你传入的cd ..只会修改这个临时启动的sh子进程的工作目录,子进程执行完命令后会直接退出,完全不会影响你当前正在操作的父shell的工作目录
  • 你之前测试的echo、pwd、cat都属于仅产生标准输出、不会修改shell自身状态的命令,所以即使在子进程运行,你也能看到输出,感知不到子进程和父进程的差异
  • 可以执行echo "cd .. && pwd" | /bin/sh验证,输出结果会是/root,说明cd在子进程中实际已经生效,只是没有同步到父shell,且cd默认没有输出所以你看不到反馈

/bin/sh可执行的命令范围

不存在固定的“完整命令列表”,只要符合以下两类规则的命令都可以被/bin/sh执行:

  • Shell内置命令:是/bin/sh自身集成实现的命令,不需要调用外部二进制文件,常见的包括cd、echo、pwd、export、unset、alias等,不同系统的/bin/sh实现(比如部分系统默认是dash、部分是bash兼容模式)内置命令列表略有差异,你可以进入sh环境后执行compgen -b查看当前/bin/sh的所有内置命令
  • 外部可执行程序/脚本:只要文件具备可执行权限,且文件路径在/bin/sh的PATH环境变量覆盖的范围内(或者写完整绝对路径),都可以被执行,比如cat、ls、grep这类常见的系统工具都属于外部命令

内容的提问来源于stack exchange,提问作者NoahVerner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:06:04