Как получить код состояния предыдущей команды в Sublime-build "cmd"?

312
Chitholian

Я хочу использовать пользовательские команды сборки для исходных кодов C в Sublime Text 3. Я использую следующий код в качестве sublime-build:

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

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

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

1

2 ответа на вопрос

0
Cristian Matthias Ambæk

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

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

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

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

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

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

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

Ваше предложение в порядке, но я остро нуждаюсь в том, чтобы держать окно «konsole» открытым. Ваше предложение выходит из окна консоли сразу после исполнения. Chitholian 5 лет назад 0
Вы проверили, является ли их опция в команде konsole, которая позволяет ему оставаться открытым? Cristian Matthias Ambæk 5 лет назад 0
0
janos

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

  • 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 и легко тестируемый независимо.

Похожие вопросы