Wie erhalte ich den Statuscode des vorherigen Befehls in Sublime-build "cmd"?

393
Chitholian

Ich möchte in Sublime Text 3 benutzerdefinierte Buildbefehle für C-Quellcodes verwenden. Ich verwende den folgenden Code als 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" } 

Hier echo 'Process returned $?';verursacht der Teil ernsthafte Probleme (dh Build wird überhaupt nicht ausgeführt!), Weil versucht wird, auf zuzugreifen $?.

Was ist die Alternative (oder die richtige Syntax), die $?hier verwendet werden soll?

1

2 Antworten auf die Frage

0
Cristian Matthias Ambæk

$? in bash zeigt den Exit-Status des vorherigen Befehls.

$? ist die richtige Syntax.

In einem Echo, wenn Sie zwei '' $ verwenden? wird nicht ausgeführt und es wird nur '$?' Anstelle des Exit-Status müssen Sie stattdessen "" verwenden.

Die Zeile echo 'Process returned $?';sollte kein ernsthaftes Problem verursachen, da sie nur ausdrückt, was zwischen '' und; beendet gerade die "Zeile"

Sie sind auch nicht sehr konsistent in Ihrem Schreiben. Arent so etwas, was Sie erreichen wollen?

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

Ich verstehe nicht wirklich, was Sie '\"''"am Ende erreichen wollen

Ihr Vorschlag ist gut, aber was ich dringend brauche, ist, das `konsole`-Fenster offen zu halten. Ihr Vorschlag verlässt das Konsolenfenster sofort nach der Ausführung. Chitholian vor 6 Jahren 0
Haben Sie geprüft, ob es sich um eine Option im konsole-Befehl handelt, mit der es weiterhin geöffnet bleibt? Cristian Matthias Ambæk vor 6 Jahren 0
0
janos

Der schwierige Punkt entweicht richtig $in $?und alle verschachtelten Anführungszeichen. Und das ist wirklich ein Albtraum, wenn Sie so tief verschachtelt sind:

  • cmd ist definiert als "..."
  • darin ist es konsole -e '...'
  • darin ist es bash -c "..."
  • darin ist echo '...'undread '...'

Darüber hinaus müssen Sie auch die Sublime-Fluchtregeln berücksichtigen, die das korrekte Schreiben zu einem echten Alptraum und auf lesbare Weise unmöglich machen.

Anstatt zu versuchen, das Problem zu beheben, empfehle ich, den komplexen Befehl in ein Skript zu extrahieren, das $file_nameund $file_base_nameals Parameter wie folgt verwendet:

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

Dann können Sie /path/to/build.shals Shell-Skript schreiben, frei von den Sublime-Parsing-Regeln und einfach unabhängig testen.