Windows下多层嵌套Shell命令执行异常问题求助
问题分析与解决方法
你的命令存在两个核心问题:
- 嵌套双引号未转义:外层bash会提前解析结束内层
-c的参数,导致tcsh没有接收到完整的执行命令,反而直接启动了交互模式(所以出现了[PPP@machine1 ...Users/PPP]$提示符); - tcsh缺少
-c参数:tcsh需要通过-c参数来指定要执行的命令字符串,否则会把后续内容当成脚本文件名,无法直接执行命令。
修正后的命令(适配Windows环境)
方法1:转义嵌套双引号(最稳妥)
执行以下命令:
C:\cygwin\bin\bash.exe -c "echo abc; echo 1; c:/cygwin/bin/bash.exe -c \"c:/cygwin/bin/tcsh.exe -c \\\"echo def; pwd -W\\\"\""
- 用
\"转义内层bash的-c参数双引号,确保外层bash完整传递命令给内层bash; - 给tcsh添加
-c参数,指定要执行的命令串; - 用
pwd -W替代pwd,让tcsh输出Windows格式的路径(匹配你的期望输出)。
方法2:用单引号简化嵌套(部分场景适用)
如果Windows命令行允许使用单引号,可改用以下命令减少转义:
C:\cygwin\bin\bash.exe -c "echo abc; echo 1; c:/cygwin/bin/bash.exe -c 'c:/cygwin/bin/tcsh.exe -c \"echo def; pwd -W\"'"
- 用单引号包裹内层bash的
-c参数,避免和外层双引号冲突; - 同样通过
-c让tcsh执行命令,并用pwd -W输出Windows路径。
执行修正后的命令后,就能得到你期望的输出:
abc 1 def C:\Users\PPP
内容的提问来源于stack exchange,提问作者PPP
相关产品推荐
相关产品推荐

