我的任务是编写一个简单的 Ruby 脚本来执行以下操作。
从 UNIX 命令行执行后,它会向用户显示一个提示符,用户可以在该提示符下运行某些命令,例如“dir
”、“help
”或“退出
”。在“exit
”时,用户应该返回到 Unix shell。
我不是在寻求解决方案;我只想知道如何在 Ruby 中实现这个“shell”功能。您如何向用户提供提示和解释命令。
我不需要带参数的 CLI 脚本。我需要创建 shell 接口(interface)的东西。
最佳答案
您需要的程序类型可以很容易地通过几个简单的结构来制作。 我知道你不是在寻求解决方案,但我只是给你一个框架,让你开始玩:
#!/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”
关于ruby - 如何使用 Ruby 编写类似 shell 的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17000458/