Como obter o código de status do comando anterior no Sublime-build “cmd”?

1

Eu quero usar comandos de compilação personalizados para códigos-fonte C no Sublime Text 3. Eu estou usando o seguinte código como sublime-build:

{
    "cmd" : ["gcc $file_name -o ${file_base_name} && konsole -e ''bash -c \"./${file_base_name}; echo 'Process returned $?'; read -p 'Press [ENTER] to exit.'\"''"],
    "selector" : "source.c",
    "shell": true,
    "working_dir" : "$file_path"
}

Aqui, a parte echo 'Process returned $?'; está causando sérios problemas (ou seja, a compilação não é executada de maneira alguma!) devido a tentativas de acesso a $? .

Qual é a alternativa (ou qual é a sintaxe correta) para usar $? aqui?

    
por Chitholian 12.05.2018 / 12:58

2 respostas

0

O ponto complicado é escapar corretamente do $ em $? e de todas as aspas aninhadas. E isso é realmente um pesadelo quando você tem um ninho tão profundo:

  • cmd é definido como "..."
  • dentro de que há konsole -e '...'
  • dentro de que há bash -c "..."
  • dentro disso, há echo '...' e read '...'

Além disso, você também precisa considerar as regras de escape do Sublime, o que faz escrever isso corretamente um verdadeiro pesadelo, e impossível de forma legível.

Em vez de tentar consertar isso, Eu recomendo extrair o comando complexo em um script que usa $file_name e $file_base_name como parâmetros, assim:

"cmd" : ["/path/to/build.sh '$file_name' '$file_base_name'"],

Em seguida, você pode escrever /path/to/build.sh como qualquer script de shell, livre das regras de análise do Sublime, e fácil de testar de forma independente.

    
por 12.05.2018 / 15:15
0

$? no bash mostra o status de saída do comando anterior.

$? é a sintaxe correta.

Em um eco, se você usar dois '' $? não vai executar e vai apenas eco '$? em vez do status de saída, você precisa usar "" em seu lugar.

A linha echo 'Process returned $?'; não deve causar um problema sério, porque apenas ecoará o que está entre '' e; apenas termina a "linha"

Você também não é muito consistente na sua escrita. Não é algo assim o que você está tentando alcançar?

"cmd" : ["gcc {$file_name} -o ${file_base_name} && konsole -e 'bash -c \"./${file_base_name}';echo \"Process returned $?\";read -p 'Press [ENTER] to exit.'"],

Eu realmente não vejo o que você está tentando alcançar com '\"''" no final

    
por 12.05.2018 / 14:50