2017-11-13 4 views
0

Ich verwende ein benutzerdefiniertes Build-System in Sublime Text 3 für ein C++ - Projekt. Eine der Leitungen sieht aus wie

"-I${HOME}/my_file/include" 

Das Problem ist, dass ${HOME} nicht auf die tatsächliche /home/user_x nicht zu erweitern, sondern dehnt sich auf einen leeren String ''. Ich finde keine Möglichkeit, den Ordner HOME elegant anzugeben, ohne den eigentlichen Pfad schreiben zu müssen. Gibt es eine Möglichkeit, dies zu tun? D. h., Um die UNIX-Variable $HOME auf den tatsächlichen Ort des Heimatordners zu erweitern?

Antwort

3

Woran Sie hier arbeiten, ist, dass die cmd, shell_cmd und working_dir Argumente all subject to variable expansion in Build-Systemen sind.

Was hier nicht beschrieben ist, ist, dass irgendetwas dieses Formats als eine Variable behandelt wird, wenn die Erweiterung stattfindet, und unbekannte Variablen zu einer leeren Zeichenfolge (d. H. Kein Wert) erweitert werden.

Als solche sieht Sublime Ihre ${HOME} und versucht, es zu erweitern, die es nicht hilfreich Wert aus der Zeichenfolge entfernt.

Die einfachste und am wenigsten invasive Art und Weise, um dies ist die $ Zeichen in dem variablen Expansions zu zitieren, so dass Erhabene es ignoriert und führt es durch, in dem der Schal es gegebenenfalls erweitern:

{ 
    "shell_cmd": "echo Home is \\${HOME}" 
} 

oder

{ 
    "cmd": "echo Home is \\${HOME}", 
    "shell": true 
} 

Beachten Sie, dass wie in diesen Beispielen sehen Sie entweder shell_cmd mit einer kompletten Befehlsfolge oder cmd mit einer Befehlsfolge in Kombination verwenden, müssen mit shell wird auf true gesetzt, damit dies funktioniert.

Beachten Sie auch, dass das Angebot scheinbar verdoppelt wird, da die Builddatei JSON ist. Wenn also der Build geladen wird, wird \\${HOME} von Sublime intern als \${HOME} angesehen (dh es "ißt" die erste Ebene des Zitatens), und die letzte Quotierung bewirkt, dass Sublime $ als Literal und nicht speziell behandelt, so dass es übergeben wird zu der Schale, die sie selbst erweitert.

0

Sie können versuchen, Ihre Befehle in ein Shell-Skript zu schreiben und das Skript von Sublime auszuführen. Ich bin mir nicht sicher, ob Sublime diese Funktion unterstützt, aber das Shell-Skript sollte $ HOME und andere Variablen finden und erweitern.

+0

In der Tat erweitert die Shell es richtig, ich frage mich, ob Sublime dies auch tun kann. Scheint wie eine bescheidene Funktion zu unterstützen :) – vsoftco

+0

Wie http://docs.sublimetext.info/en/latest/reference/build_systems/exec.html, könnten Sie auch versuchen, 'shell' auf' true' zu ​​setzen. Könnte funktionieren. – jurez

Verwandte Themen