我的任务是编写一个简单的Ruby脚本,它将执行以下操作。
从UNIX命令行执行时,它会向用户显示一个提示,在该提示下他应该可以运行某些命令,例如" dir
"," { {1}}"或" help
"。在" exit
"用户应该返回Unix shell。
我没有要求解决方案;我想知道这个" shell"功能可以在Ruby中实现。如何向用户显示提示和解释命令。
我不需要带有参数的CLI脚本。我需要创建shell接口的东西。
答案 0 :(得分:7)
只需几个简单的结构就可以轻松完成所需的程序类型。 我知道你不是在寻求解决方案,但我会给你一个骷髅来开始和玩弄:
#!/usr/bin/env ruby
def prnthelp
puts "Hello sir, what would you like to do?"
puts "1: dir"
puts "2: exit"
end
def loop
prnthelp
case gets.chomp.to_i
when 1 then puts "you chose dir!"
when 2 then puts "you chose exit!"
exit
end
loop
end
loop
无论如何,这是一个关于如何做到的简单示例,但可能评论中推荐的书更好。但这只是为了让你离开。
一些让你入门的命令是:
somevar = gets
这会获得用户输入。也许了解一些字符串方法来操纵这个输入可以对你有所帮助。 http://ruby-doc.org/core-2.0/String.html
chomp
将删除任何空格,to_i
将其转换为整数。
执行Unix操作的一些命令:
system('ls -la') #=> outputs the output of that command
exit #=> exits the program
无论如何,如果你想要这样的东西,我认为调查http://www.codecademy.com/并不是一个坏主意,基本上他们会通过编写像这样的小脚本来教你Ruby。但是,它们可能不完全适应Unix命令,但用户输入和喜欢的东西肯定会被处理。
编辑:
正如所指出的那样,请在脚本的顶部使用它:
#!/usr/bin/env ruby
编辑:
chomp
与chop
的示例:
full_name = "My Name is Ravikanth\r\n"
full_name.chop! # => "My Name is Ravikanth"
现在,如果您运行chop
并且没有换行符:
puts full_name #=> "My Name is Ravikanth"
full_name.chop! #=> "My Name is Ravikant"
与
puts full_name #=> "My Name is Ravikanth\r\n"
full_name.chomp! #=> "My Name is Ravikanth"
full_name.chomp! #=> "My Name is Ravikanth"
请参阅:“Ruby Chop vs Chomp”
答案 1 :(得分:1)
这是一个非常基本的循环:
#!/user/bin/ruby
#
while true do
print "$ "
$stdout.flush
inputs = gets.strip
puts "got your input: #{inputs}"
# Check for termination, like if they type in 'exit' or whatever...
# Run "system" on inputs like 'dir' or whatever...
end
正如斯特凡在评论中提到的,这是一个很大的话题,有些情况会使这变得复杂。正如我所说,这是一个非常基本的例子。
答案 2 :(得分:1)
添加到目前为止发布的另外两个(有效)答案时要小心使用#!/usr/bin/ruby
,因为ruby并不总是安装在那里。您可以改为使用它:
#!/usr/bin/env ruby
或者如果你想要警告:
#!/usr/bin/env ruby -w
这样,无论服务器和笔记本电脑上安装ruby的区别如何,您的脚本都能正常工作。
编辑:另外,一定要看看Thor和Rake。
答案 3 :(得分:1)
使用 irb 。 我正在寻找 bash 的替代方案,并且正在考虑同样的思路......但最终选择 fish :http://fishshell.com/
尽管如此,我正在考虑使用 irb 并沿着 irbtools 的路线前进:https://github.com/janlelis/irbtools
示例:
> irb
Welcome to IRB. You are using ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux]. Have fun ;)
>> ls #=> ["bin", "share", "opt", "lib", "var", "etc", "src"]
>>
在任何情况下, irb 都是ruby shell。
答案 4 :(得分:-1)
查看内置支持的cliqr
以构建自定义shell https://github.com/anshulverma/cliqr/