使用Sublime Text 2的bash脚本构建系统

时间:2012-12-20 09:07:13

标签: bash build-automation sublimetext2

我在Sublime 2中使用SQL查询。我有一个自定义脚本,它将sql filename作为参数,将其上传到服务器,下载查询结果并将其转换为有效的csv文件。它有效,而且非常有用。

但是,当我尝试使用此脚本为Sublime Text 2设置构建系统时,我收到错误。这是我的sublime-build文件:

{
    "cmd" : ["exec_sql.sh", "$filename"],
    "selector" : "source.sql",
    "path" : "/Users/username/sql"
}

SQL文件和exec_sql脚本都位于/ Users / username / sql /文件夹中。这是我得到的:

/Users/username/sql/exec_sql.sh: line 9: which: command not found
/Users/username/sql/exec_sql.sh: line 16: basename: command not found
/Users/username/sql/exec_sql.sh: line 19: username@hostname.com:/tmp/: No such file or directory
/Users/username/sql/exec_sql.sh: line 24: ssh: command not found
/Users/username/sql/exec_sql.sh: line 25: username@hostname.com:/tmp/.csv: No such file or directory
[Finished in 0.0s with exit code 127]

似乎尽管是一个命令行脚本,sh文件被解释为其他东西。我该如何解决?

4 个答案:

答案 0 :(得分:3)

我认为如果将自定义脚本添加到系统路径(到BIN目录),问题就可以解决了。

我将使用一个我已成功使用的详细示例。

  1. 确保您的自定义脚本已标记为可执行文件并已获得shebang。一个简单的脚本,其中包含在您的示例中失败的basename命令(我称之为test_basename.sh):

    #!/bin/bash
    echo $1
    basename $1
    
  2. 创建符号链接以将脚本包含在BIN目录中,以便可以在任何文件夹中执行。在我的Ubuntu中,我使用此命令执行此操作:

    sudo ln -s /Users/username/sql/test_basename.sh /usr/bin/test_basename.sh
    
  3. 检查控制台中任何目录中的脚本

    cd /tmp
    test_basename.sh some-filename
    
  4. 重新启动Sublime Text

  5. 创建一个使用简单脚本的构建系统。我用$ file作为例子。其他选项位于documentation

    {
        "cmd" : ["test_basename.sh", "$file"]
    }
    
  6. 在Sublime Text中打开一个文件并运行已创建的构建系统。

答案 1 :(得分:0)

如果您不想创建符号链接,请使用$project_path$file_path等变量

{
    "shell_cmd": "./do.sh",
    "shell": true,
    "working_dir": "$project_path"
}

变量参考:sublimeText docs

答案 2 :(得分:0)

我能够为Sublime Text 2创建一个通用的Bash构建系统:

  1. 创建新的构建系统
  2. 使用以下代码:

    {
        "cmd": ["/path/to/bash-build.sh", "$folder"],
        "shell": true,
        "working_dir": "$folder",
        "windows": {
            "cmd": ["C:\\path\\to\\bash-build.sh", "$folder"]
        }
    }
    
  3. 将其另存为bash.sublime-build

  4. 使用您选择的编辑器创建一个新的shell脚本,并将以下代码粘贴到其中:

    #!/bin/env bash
    
    echo "Start building..."
    
    if [ -f $1/build.sh ]; then
        cd $1
        build.sh
        cd -
    else
        echo "File doesn't exist: $1/build.sh"
    fi
    
    echo "Done."
    
    exit $?
    

    将其保存为您在Sublime Build System中引用的同一文件夹中的bash-build.sh

  5. 在Sublime中打开一个文件夹(注意:在Windows上,当从命令行打开Sublime时,构建系统似乎已损坏)

  6. 创建一个新的文本文件并将其另存为build.sh到Subilme中打开的根文件夹

  7. build.sh中,发疯了:

    #!/bin/env bash
    
    # do some crazy, custom build
    
    exit $?
    
  8. 我已开始将此项与Pandoc结合使用,以便从Markdown文件生成HTML文件。

答案 3 :(得分:0)

好像你在Mac上。在我意识到系统路径变量错误之前,我遇到了同样的问题。

我按照以下方式修复了它。

首先,通过在终端中粘贴这个来获取当前的PATH(没有第一个$):

$ echo $PATH

复制此路径(它看起来像这样:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/opt/local/bin:/opt/local/sbin

现在编辑构建系统以包含此路径(您使用的path变量实际上应该是working_dir):

{
"cmd" : ["exec_sql.sh", "$filename"],
"selector" : "source.sql",
"working_dir" : "/Users/username/sql",
"path": "PASTE $PATH VALUE HERE"

}

现在应该可以了。至少它帮助了我。