Estou usando o MSYS2 (x86-64, instalado com o 20150916 e atualizado usando pacman
para os pacotes padrão mais recentes há dois dias), mas acabei encontrando o mesmo erro (o que faz sentido, já que o MSYS2 é um cygwin derivado). Eu nunca tive isso com o MSYS, mas como o MSYS está meio morto e eu queria ferramentas mais modernas, estou migrando para o MSYS2 e portando meus scripts. Eu encontrei uma solução que está funcionando para mim no momento:
$ echo hi | cmd //c "cat | sqlcmd"
Suponho que funcione porque pedimos que cmd
configure o canal entre o processo MSYS2 ( cat
) e o processo do Windows, em vez de permitir que MSYS2 / bash
o faça. Embora eu também suspeite que o SQLCMD
esteja fazendo algum truque maldoso da programação do Windows nos anos 90 que ele não deveria estar fazendo em primeiro lugar, tornando-se um caso especial que talvez mereça uma solução alternativa no cygwin / MSYS2. / p>
Note que com este método, passar argumentos para sqlcmd
torna-se realmente difícil, especialmente se você quiser passar um literal "
.
Saída completa de mim, demonstrando o erro, sua solução e mostrando de onde meu sqlcmd
está vindo:
ohnob@WIN-F5A6PNAUAJ2 ~
$ echo hi |sqlcmd -S localhost\SQLEXPRESS12
Sqlcmd: Error: Internal error at ReadTextLine (Reason: Unspecified error).
ohnob@WIN-F5A6PNAUAJ2 ~
$ echo hi | cmd //c "cat | sqlcmd -S localhost\SQLEXPRESS12"
Msg 2812, Level 16, State 62, Server WIN-F5A6PNAUAJ2\SQLEXPRESS12, Line 1
Could not find stored procedure 'hi'.
ohnob@WIN-F5A6PNAUAJ2 ~
$ which sqlcmd
/c/Program Files/Microsoft SQL Server/Client SDK/ODBC/110/Tools/Binn/sqlcmd
ohnob@WIN-F5A6PNAUAJ2 ~
$ WHERE cat | head -n 1
C:\msys64\usr\bin\cat.exe