1

Я хочу использовать пользовательские команды сборки для исходных кодов C в Sublime Text 3. Я использую следующий код в качестве 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"
}

Здесь часть echo 'Process returned $?'; вызывает серьезную проблему (т.е. сборка вообще не запускается!) из-за попытки доступа к $? ,

Какая альтернатива (или каков правильный синтаксис) для использования $? Вот ?

2 ответа2

0

$? в bash показывает состояние выхода предыдущей команды.

$? правильный синтаксис

В эхо, если вы используете два '' $? не выполнит, и это будет просто эхо '$?'вместо статуса выхода, вы должны использовать "" вместо.

Строка echo 'Process returned $?'; не должно вызывать серьёзных проблем, потому что оно будет просто отражать то, что находится между '' и; просто завершает "линию"

Вы также не очень последовательны в своем письме. Что-то вроде этого, чего вы пытаетесь достичь?

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

Я действительно не вижу, чего вы пытаетесь достичь с помощью '\"''" в конце

0

Хитрость в том, чтобы правильно избежать $ in $? и все вложенные кавычки. И это действительно кошмар, когда у тебя такое глубокое вложение:

  • cmd определяется как "..."
  • в этом есть konsole -e '...'
  • в этом есть bash -c "..."
  • в этом есть echo '...' и read '...'

Кроме того, вам также необходимо учитывать правила перехода Sublime, что делает написание этого текста настоящим кошмаром и невозможным для чтения.

Вместо того, чтобы пытаться это исправить, я рекомендую извлечь сложную команду в скрипт, который принимает в качестве параметров $file_name и $file_base_name , например:

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

Затем вы можете написать /path/to/build.sh как любой скрипт оболочки, свободный от правил синтаксического анализа Sublime и легко тестируемый независимо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .