小编sta*_*fry的帖子

bash是否支持单词边界正则表达式?

我试图匹配列表中的单词的存在,然后再次添加该单词(以避免重复).我正在使用bash 4.2.24并尝试以下方法:

[[  $foo =~ \bmyword\b ]]
Run Code Online (Sandbox Code Playgroud)

[[  $foo =~ \<myword\> ]]
Run Code Online (Sandbox Code Playgroud)

但是,似乎都不起作用.它们在bash docs示例中提到:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_04_01.html.

我认为我做错了什么,但我不确定是什么.

regex bash

27
推荐指数
4
解决办法
1万
查看次数

是否可以在模型中使用rails image_tag?

我有一个rails 3.x应用程序,它具有模型类,可以将内容返回到部分要在页面上呈现的视图.该模型负责处理内容,并将其返回到视图中,盲目地将其添加到页面中.换句话说,视图调用模型询问其内容; 该模型将其内容HTML-Safe传递给视图; 并且视图只是将返回的内容转储到其输出中.

到目前为止,一切正常.

我需要创建一个类,它返回html以获取资源管道中图像的链接(视图不知道或不关心返回的东西是图像).

在最简单的形式中,模型从数据库中读取包含文件名"my_image.png"的记录.它需要返回HTML视图,该HTML引用具有该名称的图像,该图像位于"app/assets/images"中.

是否有可能做到这一点 ?

model ruby-on-rails

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

在目标内设置环境变量

我在makefile中有一个目标:

all: $(TARGETS)
Run Code Online (Sandbox Code Playgroud)

我想要一个变体,all它不仅仅是因为它设置了一个环境变量.就像是:

all-abc: $(TARGETS)
    ABC=123
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为在设置变量之前处理依赖项.我已经考虑过在设置环境变量的实际依赖之前有另一个依赖,但我不认为环境会在目标之间持续存在.也就是说

abc:
    ABC=123
all-abc: abc $(TARGETS)
Run Code Online (Sandbox Code Playgroud)

不起作用.我最终希望能做的是

$ make all-abc
Run Code Online (Sandbox Code Playgroud)

代替

$ ABC=123 make
Run Code Online (Sandbox Code Playgroud)

是否可以设置这样的环境变量?

(GNU Make 3.82)

makefile

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

我应该使用"rake spec"还是"rspec"(不能让"rake spec"工作)?

我在Rails 3.2上,我正在使用rspec(2.11.1).当我使用"rake spec"运行我的测试套件时,我会失败.当我用"rspec"运行它时,一切都过去了.我已经看到过这个问题的其他提及,但没有明确的解释正在发生的事情和最佳实践.

如果我做"rake spec"或"rake tmp:clear && rake spec"我的测试失败了.

如果我执行"rspec"或"rspec spec"或"rake db:test:prepare && rspec",我的测试通过.

我认为唯一的区别是rake做了"db:test:prepare"但是如果我在运行rspec之前手动执行该操作,那么我的测试就会通过,所以这不是故事的全部内容.

做了一些阅读后,我改变了我的Gemfile.之前我根据"RSpec Book"(p328)设置了它,它描述了将rspec gem放在"group:development,:test"块中.阅读了其他一些SO帖子后,我删除了":development"并做了一个捆绑.现在"rake spec"什么都不做."rspec"仍然像以前一样工作.

非常困惑...

rake rspec ruby-on-rails

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

翻译模型嵌套属性验证消息

我有一个嵌套属性,我在其上执行状态验证.我正在尝试没有成功提供完整错误消息文本中返回的属性名称的翻译.

调用模型Identity并包含一个名为identity的模型.模型嵌套在另一个具有has_many关系的模型中.

当前返回典型的错误消息

Identities identity can't be blank
Run Code Online (Sandbox Code Playgroud)

我想将属性(默认情况下Identities identity)转换为其他内容.

我有

en:
  activerecord:
    models:
      identity:
        identity: "whatever"
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我会收到错误

I18n::InvalidPluralizationData (translation data {:identity=>"whatever"} can not be used with :count => 1):
Run Code Online (Sandbox Code Playgroud)

我试图通过改变上面的内容来为此添加复数数据

en:
  activerecord:
    models:
      identity:
        identity:
          one: "one"
          other: "other"
Run Code Online (Sandbox Code Playgroud)

这会将错误更改为

I18n::InvalidPluralizationData (translation data {:identity=>{:one=>"one", :other=>"other"}} can not be used with :count => 1):
Run Code Online (Sandbox Code Playgroud)

我也试过many而不是other没有区别.

我已经花了几个小时试图完成这项工作,在Stack Overflow和其他地方阅读了其他问题但没有成功.为属性名称编写翻译的正确方法是什么?

ruby-on-rails activemodel rails-i18n

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

使用bash进程替换sudo命令

我想使用bash进程替换sudo命令.

例如,这是一个适用于我的非sudo命令:

$ cat <(echo "installed.txt")
installed.txt
Run Code Online (Sandbox Code Playgroud)

这是命令的sudo版本不起作用:

$ sudo cat <(echo "installed.txt")
cat: /dev/fd/63: Bad file descriptor
Run Code Online (Sandbox Code Playgroud)

阅读sudo手册页,似乎在以root身份运行命令之前,sudo会关闭除stdin/stdout/stderr文件描述符之外的所有文件描述符.这让我认为bash在运行sudo命令之前正在创建描述符(并执行进程替换).

我将root的shell更改为bash(而不是默认值).我已经测试过,以root身份登录时该命令工作正常.它只能通过sudo命令工作.

实现我在这里要做的事情的适当技术是什么?Eval,引用,sudo标志,sudoers文件mod,其他?

bash

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

sqlite 计算由子查询标识的表的行数

我想获取 Sqlite3 数据库中每个表中的行数。我想避免写出一个普通的查询。我可以得到这样的表列表:

SELECT name FROM sqlite_master WHERE type='table'
Run Code Online (Sandbox Code Playgroud)

我想在这样的子查询中使用它:

select count (*) from (SELECT name FROM sqlite_master WHERE type='table');
Run Code Online (Sandbox Code Playgroud)

但只会返回子查询中的总行数,这不是我想要的。

如何编写一个查询来列出每个表及其计数?

我见过这种事情的动态 SQL,但我认为 SQLite 没有。

我已经编写了一个bash循环来执行此操作,但我更愿意将其作为单个查询来执行

for t in $(sqlite3 data.db "SELECT name FROM sqlite_master WHERE type='table'"); do
  echo -n "$t = "; sqlite3 data.db "SELECT COUNT(*) FROM $t;"
done
Run Code Online (Sandbox Code Playgroud)

想法赞赏

sqlite

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

未定义的符号:使用Ruby和ArchLinux的SSLv3_method - .../openssl.so

最近在ArchLinux上的OpenSSL更新破坏了Ruby,因为后者依赖于前者支持的SSLv3.使用OpenSSL的Ruby代码将在终止时出现如下错误的问题:

openssl.so: undefined symbol: SSLv3_method - .../openssl.so (LoadError)
Run Code Online (Sandbox Code Playgroud)

我使用RVM的多个版本的Ruby,这个问题适用于所有这些版本.

我遇到问题的OpenSSL版本是,1.0.2h但我相信它是随之而来的1.0.2g.版本1.0.2f工作正常.

如何克服兼容性问题(不降低OpenSSL)?

ruby openssl archlinux rvm

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

Dockerfile COPY 和 RUN 在一层

我有一个用于准备 Docker 映像的脚本。我在 Dockerfile 中有这个:

COPY my_script /
RUN bash -c "/my_script"
Run Code Online (Sandbox Code Playgroud)

my_script文件包含我不希望出现在图像中的秘密(完成后它会自行删除)。

问题是尽管被删除了文件仍然保留在图像中,因为 COPY 是一个单独的层。我需要的是 COPY 和 RUN 影响同一层。

如何复制和运行脚本以便两个操作都影响同一层?

docker

8
推荐指数
3
解决办法
4228
查看次数

如何让 ssh 从 Windows 上的 stdin 接收密码

阅读完这个问题和我的答案后,我想在 Windows 上做类似的事情。

我的Linux解决方案是这样的:

#!/bin/bash
[[ $1 =~ password: ]] && cat || SSH_ASKPASS="$0" DISPLAY=nothing:0 exec setsid "$@"
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Windows上做类似的事情,我可以从Windows命令提示符或批处理文件中使用这样的东西:

C:> echo password | pass ssh user@host ...
Run Code Online (Sandbox Code Playgroud)

注意事项:

  • ssh这里是使用免费版本的crwsync安装的。它使用 Cygwin DLL,但不需要安装 Cygwin。
  • 该解决方案不需要进一步的依赖项:它可以通过典型的 Windows命令提示符或批处理文件运行。

我正在寻找上述问题的答案,即使答案是“这是不可能的”。我知道我可以使用密钥(及其相对优点)或其他工具,例如 Python/Paramiko、PuTTYplink等。我知道我可以在 Cygwin 环境中做到这一点。我不想做这些事情...我需要从普通的旧 Windows 命令提示符或批处理文件中执行此操作,而不会产生额外的依赖项,因为如果可能的话,它将减少现有的依赖项。

这是我到目前为止所拥有的:

@echo off
echo.%1 | findstr /C:"password">nul
if errorlevel 1 (
  set SSH_ASKPASS="%0"
  set DISPLAY="nothing:0"
  %*
) else (
  findstr "^"
)
Run Code Online (Sandbox Code Playgroud)

这个想法是将其另存为,说pass.bat并像这样使用它:

C:> echo …
Run Code Online (Sandbox Code Playgroud)

windows cygwin openssh batch-file

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