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.
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
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