我在Sublime Text 3中使用自定义构建系统来进行C ++项目。其中一行似乎是
"-I${HOME}/my_file/include"
问题是${HOME}
没有扩展到实际的/home/user_x
,而是扩展为空字符串''
。我找不到任何方式来优雅地指定HOME
文件夹,而无需编写实际路径。有办法做到这一点吗?即,将UNIX $HOME
变量扩展到主文件夹的实际位置?
答案 0 :(得分:3)
您在此处遇到的问题是构建系统中的shell_cmd
,working_dir
和${HOME}
参数为all subject to variable expansion。
没有概述的是,当扩展发生时,这种格式的任何内容都被视为变量,未知变量被扩展为空字符串(即没有值)。
因此,Sublime会看到您的$
并尝试展开它,这无助于从字符串中删除它的值。
最容易和最少侵入性的方法是引用变量扩展中的{
"shell_cmd": "echo Home is \\${HOME}"
}
字符,以便Sublime忽略它并传递它,shell可以在适当的时候扩展它:
{
"cmd": "echo Home is \\${HOME}",
"shell": true
}
或
shell_cmd
请注意,如这些示例所示,您需要将cmd
与完整的命令字符串一起使用,或shell
将命令字符串与true
一起设置为\\${HOME}
为了使它能够发挥作用。
另请注意,引用似乎加倍,因为构建文件是JSON。因此,当加载构建时,Sublime会在内部将\${HOME}
视为$
(即它"吃掉"第一级引用),最终引用会导致Sublime对待{{1}}作为一个文字,而不是特殊的,以便它将被传递给shell,它会自己扩展它。
答案 1 :(得分:0)
您可以尝试将命令编写到shell脚本并从Sublime运行脚本。我不确定Sublime是否支持此功能,但shell脚本应该找到并展开$ HOME和任何其他变量。