Ruby [已解决] ruby 调用 shell 时大括号不能展开

jjym · 2012年11月29日 · 最后由 jjym 回复于 2012年11月29日 · 4439 次阅读

mkdir {dir1,dir2} 这样写在 shell 是能展开的

但是通过 ruby 调用只能得到文件夹{dir1,dir2} `` exec system popen 好像都不能展开。。求解有啥好办法

这样写在我这里没有问题 (1.9.3p194, Linux)

system 'mkdir {foo,bar}'

用一个字符串代表命令,Ruby 就会把指令交给 shell 去执行,从而可以享受到 shell 的语法糖。包括 glob 展开,IO 重定向等。

猜想 lz 应该使用了数组代表命令,这样 Ruby 会直接使用 exec 传参。不过 lz 并未贴出自己的调用方式...

#1 楼 @5long 好吧,我的调用方式是先复制你的代码,然后执行,结果不能展开。。 ruby 1.9.3p327 (2012-11-10 revision 37606) [i686-linux]

#2 楼 @jjym

我刚试了一下把 /bin/sh 这个本来指向 /bin/bash 的软链接改成指向 /bin/dash, 复现了你的问题。

现在很多 Linux 发布版 (印象中包括 CentOS, Gentoo, SuSE, Arch) 的 /bin/sh 都指向 bash 而不是 posix shell. Debian 依然用的是 dash~是 Debian 的 posix shell 实现。

所以如果你在用 Debian/Ubuntu 及其衍生版那么就会出现这个情况。

#3 楼 @5long thx,改成 bash 就好了

我昨天刚刚遭遇类似问题,云主机上,我写的 bash script 提供了莫名其妙的错误。后来才发现是指向了 dash...

#5 楼 @zw963 ubuntu 坑爹啊。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号