Sublime texto 2 sistema de compilação

0

Eu quero construir um arquivo usando o Sublime Text 2 e, em seguida, fazer uma cópia simples. Eu consegui fazer a primeira coisa usando um sistema de compilação, e acho que tem que ser possível fazer a cópia com o sistema de compilação também (porque eu posso fazer isso em um arquivo de lote).

O script em lote o que eu quero fazer é:

copy /b hang.bin+sectors.bin image.img

E o sistema de compilação que eu uso é:

{
"cmd": ["copy", "/b", "hang.bin+sectors.bin", "image.img"],
"working_dir": "$file_path"
}

A mensagem de erro que recebo:

[Error 2] The system can't find the specified file
[cmd:  [u'copy', u'/b', u'hang.bin+sectors.bin', u'image.img']]
[dir:  C:\Documents and Settings\xxx\Desktop\Project]
[path: C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Ulead Systems\MPEG]
[Finished]

Sim, codifiquei o arquivo hang.bin para ver se isso funcionaria, mas não. Normalmente eu usaria ${file_name}.bin lá.

Eu suspeito que a sintaxe + dos dois arquivos a serem copiados (para um novo arquivo) é o problema, mas não tenho certeza. Alguém pode me ajudar?

Ruben
fonte

Respostas:

1

Corre where copy em uma linha de comando e você verá que copy não é um programa, mas um comando interno fornecido por cmd. O Sublime Text executa sistemas de compilação nativamente, sem cmd, por isso não reconhece copy.

Há uma solução: execute o comando através de cmd. De cmd ajuda:

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
    [[/S] [/C | /K] string]

/C      Carries out the command specified by string and then terminates

Então, por exemplo, cmd /C notepad executará o Bloco de notas e sairá imediatamente, sem esperar que ele saia. cmd /C copy vai funcionar também, porque é executado através de cmd. Seu comando deve ficar assim:

cmd /C "copy /b hang.bin+sectors.bin image.img"

Lembre-se das citações, caso contrário /b e o resto do comando será tratado como argumentos para cmd, não copy.

gronostaj
fonte
Obrigado! Qual seria a forma de construção sublime? Eu tentei muitas coisas, mas não consigo fazer funcionar ...
Ruben
O que exatamente você tentou? O último codeblock deve estar funcionando, mas lembre-se de escapar citações etc.
gronostaj
Eu tentei converter isso para o formato JSON, tentando coisas como { "cmd": ["C:\\nasm\\nasm", "$file_name", "-f bin", "-o hang.bin"], "cmd": ["cmd /C \"copy /b hang.bin+sectors.bin image.img\""], "working_dir": "$file_path" } mas isso me dá o mesmo erro de antes (erro 2: o sistema não consegue encontrar o arquivo especificado). Se eu apenas copiar a linha, recebo a mensagem "Erro ao tentar analisar o sistema de compilação: Valor esperado em & lt; caminho & gt; /build.sublime-build: 1: 1"
Ruben
1. Você não pode ter dois campos com nomes idênticos em um JSON (eu estou olhando cmd ). Se você quiser emitir mais de um comando, a maneira mais simples de obtê-lo é criar um arquivo em lotes e iniciá-lo a partir de um sistema de compilação. Você pode passar quantos argumentos desejar e depois emitir seus comandos daquele arquivo BAT. 2. Nos caminhos do sistema de compilação você deve usar barras, não barras invertidas - o Sublime Text cuidará delas e evitará problemas de escape. 3. Eu me lembro que uma vez eu tive que usar double escaping, ou seja, em vez de " deveria ser \\\". Você pode tentar isso.
gronostaj
Claro! Deu certo. Meu sublime arquivo de compilação: { "cmd": ["<path>/assemble.bat", "$file_name"], "working_dir": "$file_path" } Meu arquivo assemble.bat: C:\\nasm\\nasm %1 -f bin -o boot.bin bfi -f=boot.img -l=bootflop ./floppy bootcopy (Como você pode ver, eu não uso mais a cópia, mas uma ferramenta que eu mesmo escrevi chamada bootcopy)
Ruben