mkdir {dir1,dir2} 这样写在 shell 是能展开的
mkdir {dir1,dir2}
但是通过 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, 复现了你的问题。
/bin/sh
/bin/bash
/bin/dash
现在很多 Linux 发布版 (印象中包括 CentOS, Gentoo, SuSE, Arch) 的 /bin/sh 都指向 bash 而不是 posix shell. Debian 依然用的是 dash~是 Debian 的 posix shell 实现。
dash
所以如果你在用 Debian/Ubuntu 及其衍生版那么就会出现这个情况。
#3 楼 @5long thx,改成 bash 就好了
我昨天刚刚遭遇类似问题,云主机上,我写的 bash script 提供了莫名其妙的错误。后来才发现是指向了 dash...
#5 楼 @zw963 ubuntu 坑爹啊。。