小编Jos*_*eek的帖子

bundle install为#<Bundler :: Dsl:0x00000001c4e1f8>提供了未定义的方法`ruby'

bundle install 给予:

> undefined method `ruby' for #<Bundler::Dsl:0x00000001c4e1f8>
Run Code Online (Sandbox Code Playgroud)

知道怎么解决?我正在使用Ruby 1.9.3-p125.

ruby bundler

10
推荐指数
3
解决办法
3082
查看次数

unix:如何判断字符串是否与正则表达式匹配

尝试鱼贝,所以我翻译我的bash功能.问题是,在一种情况下,我正在使用bash正则表达式来检查字符串是否与正则表达式匹配.我无法弄清楚如何把它翻译成鱼.

是我的例子.

if [[ "$arg" =~ ^[0-9]+$ ]]
...
Run Code Online (Sandbox Code Playgroud)
  • 我查看了sed,但是我没有看到根据正则表达式是否匹配来设置退出状态的方法.
  • 我考虑委托给Ruby,但同样,根据匹配设置退出状态需要让它变得非常丑陋(见下文).
  • 我考虑委托回bash,但尽管尝试了三四种方式,但从来没有得到匹配.

那么,在*nix中是否有一种方法可以检查字符串是否与正则表达式匹配,所以我可以将它放入条件中?


这是我目前有效的,但我不满意:

# kill jobs by job number, or range of job numbers
# example: k 1 2 5
# example: k 1..5
# example: k 1..5 7 10..15
# example: k 1-5 7 10-15
function k
  for arg in $argv
    if ruby -e "exit ('$arg' =~ /^[0-9]+\$/ ? 0 : 1)"
      kill -9 %$arg
    else
      set _start (echo …
Run Code Online (Sandbox Code Playgroud)

regex unix linux pattern-matching fish

9
推荐指数
2
解决办法
9304
查看次数

榆树什么是类型签名中的"x"?

试图弄清楚如何获取当前时间,我找到了方法,但不知道如何读取类型签名.

签名是now : Task x Time你可以在这里看到的.

无法弄清楚如何搜索它,因为它们x在任何地方都用作变量名,我通常可以在解析器代码中找到合适的位置,但是跟随它有很多困难.

elm

6
推荐指数
1
解决办法
207
查看次数

Git 从浅克隆中查找自 &lt;ref&gt; 以来修改的文件

我在 CI 盒子上运行测试。为了加快速度,我只是做了一个浅克隆:

git clone --depth 1 git@github.com:JoshCheek/some_repo.git
Run Code Online (Sandbox Code Playgroud)

假设所有测试都通过,我想触发管道中的下一步。触发的内容取决于上次部署(参考d123456)和我刚刚测试的当前参考(参考c123456)之间更改的文件。如果我做了一个普通的克隆,我可以发现这样的结果:

git diff --name-only d123456 c123456
Run Code Online (Sandbox Code Playgroud)

但我的克隆很浅,所以它不知道这些提交。我发现我可以用来git fetch --depth=n获取更多历史记录,但我只知道 SHA,而不知道 SHA 的深度。以下是可能可以回答这个问题的一组方法:

# hypothetical remote diff
git diff --name-only origin/d123456 origin/c123456

# hypothetical ref based fetch
git fetch --shallow-through d123456
git diff --name-only d123456 c123456

# hypothetical way to find the depth I need
depth=`git remote depth-to d123456`
git fetch --depth "$depth"
git diff --name-only d123456 c123456
Run Code Online (Sandbox Code Playgroud)

否则,我似乎可能必须编写一个循环并继续调用,--deepen直到我的历史记录包含提交。这看起来很痛苦(意味着编写/维护很烦人)并且昂贵(意味着缓慢,请记住浅层克隆的目的是减少这种成本)。

git git-diff git-fetch git-remote

6
推荐指数
1
解决办法
2527
查看次数

用ssl安装curl所以我可以安装自制软件

解决方案

我使用Bruno的帖子来找到解决方案,但觉得它需要更具体,所以这显然是我所做的.

  1. cacert.pem下载到我的〜/ .ssh目录中(我不知道这是不是应该去的地方,但我看到有人在尝试寻找解决方案时做了类似的事情,所以这就是我把它放在哪里).
  2. 为安装设置env var CURL_CA_BUNDLE.这实际上是失败建议的网站上的第4号解决方案.我只是误解了他们的意思(一个简单的例子可能让我节省了数小时的困惑).无论如何,您需要指定.pem文件的完整路径,然后您可以像这样安装然后安装它!$ CURL_CA_BUNDLE=~/.ssh/cacert.pem ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

原始问题

我该怎么做

  1. 安装自制软件,或者
  2. 使用SSL安装curl以便我可以安装自制软件?

我在Mac OSX Leopard上.

我正在尝试安装自制软件,但是我收到以下错误:

$ ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/Formula/...
/usr/local/Library/Homebrew/...
==> The following directories will be made group writable:
/usr/local/bin
/usr/local/lib
/usr/local/lib/pkgconfig
/usr/local/share/man/man1
/usr/local/share/man/man3

Press enter to continue
==> /usr/bin/sudo /bin/chmod g+w /usr/local/bin /usr/local/lib /usr/local/lib/pkgconfig /usr/local/share/man/man1 /usr/local/share/man/man3
==> Downloading and Installing Homebrew...
curl: (60) SSL certificate problem, …
Run Code Online (Sandbox Code Playgroud)

ssl homebrew curl ca

5
推荐指数
1
解决办法
2万
查看次数

如何将一组修改后的提交(存储在 reflog 中)转换为真正的提交

我正在做重构,每次我取得任何不错的进展时都会不断修改。它进展得非常顺利,我意识到能够向人们展示我如何处理如此巨大的重构(很多小步骤,只是轻推代码,每个点都有一个绿色测试套件)会很好。

提交都在我的reflog 中。有没有办法将每个修改后的提交转换为自己的真实提交(抱歉,不知道术语),以便用户可以看到每个步骤,而不仅仅是第 81 行和第 57 行的汇总步骤?我不需要提交或任何东西的独特消息,只需要它们在历史记录中被捕获。

这一切仍在我的本地仓库中。

git refactoring commit reflog

5
推荐指数
1
解决办法
169
查看次数

如何将我的配置添加到Sublime Text 2的菜单?

我已经为Sublime Text 2编写了一个插件,它与我写的二进制文件进行了对话.我通过设置文件将标志暴露给二进制文件,但我无法弄清楚如何将设置文件放入菜单栏中.

我想要的设置

是迄今为止我最好的尝试.

以下是有关设置的文档(不确定菜单上的文件的位置).

configuration menu preferences sublimetext2

5
推荐指数
1
解决办法
1734
查看次数

更改目录的Bash功能

我有一个常见的用例,我想写一个函数:我经常想要cd到一些相对于某个文件的目录.

我目前的工作流程如下:

$ gem which rspec/core | xargs echo -n | pbcopy
$ cd *paste and delete end until direcory looks right*
Run Code Online (Sandbox Code Playgroud)

注意:gem which rspec/core打印类似"/Users/joshcheek/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.10.0/lib/rspec/core.rb"

我希望它看起来像这样:

$ gem which rspec/core | 2dir 3
Run Code Online (Sandbox Code Playgroud)

这将把我变成"/Users/joshcheek/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.10.0"(传递参数"3"告诉它删除"lib/rspec/core.rb"从头到尾"

这是迄今为止我得到的最好的:

2dir() {
  read dir
  for i in $(seq 1 $1)
    do
      dir="${dir%/*}"
  done
  cd "$dir"
}
Run Code Online (Sandbox Code Playgroud)

但是cd改变了函数的目录,而不是我的目录.我尝试用别名交换它,但无法弄清楚如何制作匿名函数或传递参数.

bash cd

3
推荐指数
1
解决办法
5599
查看次数

C编程:预处理器,宏作为标记

我正在尝试做一些概念上与此相似的事情,但似乎无法让它发挥作用(最后显示的错误)任何想法?

#include <stdio.h>

int main( int argc , char const *argv[] )
{
  int abc_def_ghi = 42;
  #define SUFFIX ghi
  #define VAR(prefix) prefix##_def_##SUFFIX
  printf( "%d\n" , VAR(abc) );
  return 0;
}

// untitled:8: error: ‘abc_def_SUFFIX’ undeclared (first use in this function)
Run Code Online (Sandbox Code Playgroud)

c macros token stringification c-preprocessor

2
推荐指数
2
解决办法
3358
查看次数

C编程:预处理器,包括宏的文件

如果我能找到一种方法来做类似的事情,我可以在我的应用程序中删除数百行代码,并大大提高可维护性.有人有主意吗?

#include <stdio.h>

int main( )
{
  #define include_all_files(root)   \
            #include #root "1.h"    \
            #include #root "2.h"    \
            #include #root "3.h"    \
            #include #root "4.h"

  include_all_files( first_library )
  include_all_files( second_library )
  include_all_files( third_library )

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我很欣赏这些回复,我的例子似乎导致了误导,所以这就是我实际上要解决的问题:

我正在实现一个有限状态机.通过命名约定,我已经让它变得像添加状态一样简单:

  STATE(initial_screen)
    #include "initial_screen.state"
  END_STATE

  STATE(login)
    #include "login.state"
  END_STATE
Run Code Online (Sandbox Code Playgroud)

但是,如果我能回答原来的问题,我可以将其重构为简单的事情:

  ADD_STATE(initial_screen)
  ADD_STATE(login)
Run Code Online (Sandbox Code Playgroud)

这是因为文件名和状态名称以及所有底层连接和其他所有内容都遵循类似的约定.但是,我无法弄清楚如何根据宏中收到的令牌实现包含文件.

c macros include c-preprocessor

1
推荐指数
1
解决办法
1661
查看次数