gpt4 book ai didi

windows - 仅在管道时无法回显右括号

转载 作者:可可西里 更新时间:2023-11-01 14:43:45 26 4
gpt4 key购买 nike

我有一个非常特殊的问题,echo 写“ECHO is on.”,即使它有一个参数,但只有在打印到管道时,对于某些参数.

我的用例是我正在编写一个脚本文件以提供给解释器。在 Linux 上,我使用 heredocs 很好地实现了这一点。

prog arg1 - arg3 arg4 \
<< EOM
start server load (
foreground
initial database '$database'
directory $directory
from file '${database}.ext'
);
EOM

对于 Windows 的批处理,我最近发现了一些非常相似的东西;

(
echo start server load ^(
echo foreground
echo initial database '%%d'
echo directory %directory%
echo from file '%%d.ext'
echo ^);
echo.
) | prog arg1 - arg3 arg4

但我一直收到以下错误:

E7511-ACE: '-' line 6: An error has occurred while processing the DDM file.
Caused by
E2420-ACE: Expected punctuation character ')'.
4: directory 'C:\Users\redacted\AppData\Local\Temp'
5: from file 'testing.ext'
6: ECHO is on.
---^---
7: )

但如果我不情愿地使用临时文件,一切都运行良好!

(
echo start server load ^(
echo foreground
echo initial database '%%d'
echo directory %directory%
echo from file '%%d.ext'
echo ^);
echo.
) > tmp.txt
prog arg1 tmp.txt arg3 arg4

tmp.txt的内容;

start server load (
foreground
initial database 'testing'
directory 'C:\Users\redacted\AppData\Local\Temp'
from file 'testing.ext'
);

我什至尝试模拟一个 .bat 来尝试展示它,但它所做的只是让我觉得我疯了

@echo off
set databases=a
for %%d in (%databases%) do (
(
echo bob ^(
echo %%d
echo ^);
)
)
pause

输出:

bob (
a
);
Press any key to continue . . .

我不知道任何接受 stdin.exe 并且只是将它写到屏幕/文件中以供我测试我的“它何时损坏”管道”假设(Windows 的 typeecho 不如 Linux 的 catecho 通用),
你们有什么想法吗?

最佳答案

管道是在两个进程之间创建的。管道左侧的代码是批处理代码,因此将启动一个新的 cmd 实例来为管道左侧创建进程,并将代码传递给该实例。

您的转义字符是为当前 cmd 实例正确编写的,但是当代码传递给新实例时,没有转义码,因为它们在准备要在新实例中执行的代码时被消耗掉了cmd 实例。

您需要对右括号进行双重转义,转义转义字符和转义括号,以便新的 cmd 实例接收到正确转义的括号。

(
echo start server load (
echo foreground
echo initial database '%%d'
echo directory %directory%
echo from file '%%d.ext'
echo ^^^);
echo.
) | prog arg1 - arg3 arg4

问题中的重定向和 for 代码没有任何问题,因为代码正在当前 cmd 实例中执行。

关于windows - 仅在管道时无法回显右括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29600634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com