【问题标题】:Build system with bash script for Sublime Text 2使用 Sublime Text 2 的 bash 脚本构建系统
【发布时间】:2012-12-20 09:07:13
【问题描述】:

我在 Sublime 2 中处理 SQL 查询。我有一个自定义脚本,它以 sql 文件名作为参数,将其上传到服务器,下载查询结果并将其转换为有效的 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 文件是一个命令行脚本,但它被解释为其他东西。我该如何解决?

【问题讨论】:

    标签: bash build-automation sublimetext2


    【解决方案1】:

    我认为如果将你的自定义脚本添加到系统路径(到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 中打开一个文件并运行创建的构建系统。

    【讨论】:

    • 当我创建符号链接时,我通常会删除文件扩展名:)
    • 我从不将sh 扩展名用于 bash 脚本...它是迟钝和误导性的!
    • @gniourf_gniourf,如果这是一个新手问题,我深表歉意,但是添加 .sh 扩展名会产生误导吗?非常感谢!
    【解决方案2】:

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

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

    变量参考:sublimeText docs

    【讨论】:

      【解决方案3】:

      我能够为 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 $?
        

        将它保存为bash-build.sh 在您在 Sublime 构建系统中引用的同一文件夹中

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

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

      7. build.sh,发疯吧:

        #!/bin/env bash
        
        # do some crazy, custom build
        
        exit $?
        

      我已经开始将它与Pandoc 结合使用来从 Markdown 文件生成 HTML 文件。

      【讨论】:

        【解决方案4】:

        您好像在 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"
        

        }

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-12
          • 2013-01-03
          • 2021-10-31
          • 2020-10-07
          • 1970-01-01
          相关资源
          最近更新 更多