Command Expansion

Command Expansion

看programming ruby中提到,反引号'或者%x为前缀的分界方式括起来的字符串会被当作操作系统的命令来执行,于是根据例子在ruby shell就是irb下输入'date',不知道为什么返回date=>nil,而不是现实系统时间?改用%x{'date'}或者%x'date'均无反应。唯一成功的是%x'dir'可返回,请教各位前辈高人给予解答,谢谢。(注:操作系统为windows xp)
chenk@chen:~$ irb
Welcome to Ruby's World
irb(main):001:0> %x{date}
=> "2007年 11月 13日 星期二 10:32:16 CST\n"

我没有问题,我是用Linux。

你在命令行下输入date看看有没有反映,如果没有则表示windows根本没有这个实用程序。


[Copy to clipboard] [ - ]
date输入跟zhuzhao 的结果是一样的,我认识是不是系统等等输入新的日期的原因,造成%x{date}无响应。


[Copy to clipboard] [ - ]
书上说的满清楚,%x方法是在调用kernel的反引号操作符
maninred的操作系统是linux,你的是windows
你可以尝试一下执行反引号命令,效果跟%x是一样
`dir`
命令是将程序执行并捕获stdout输出
如果还不行,可能是windows系统上rubu对stdout输出处理上跟linux的差异,我们在继续讨论
了解清楚了,谢谢大家
'dir’仅仅是输出数据,没有等用户输入响应的过程,所以,一直来不管'dir'还是%x{'dir'}都是可以y运行成功的。只是'date'不行,会造成假死状态。可以参考5楼的图就很清楚问题了。
个人认为是因为‘date’在windows下等待用户输入新日期的原因,看来书的后面几张,觉得应该可以用IO.popen方法解决。
sydate=IO.popen("Date")
puts sydate.gets
如果仅仅要输出,最简单的方式就是
system("date")