如何使用Ruby编写类似shell的脚本?

tem*_*uri 4 ruby shell

我的任务是编写一个简单的Ruby脚本,它将执行以下操作.

从UNIX命令行执行时,它会向用户显示一个提示,在该提示下,他应该能够运行某些命令,例如" dir"," help"或" exit".在" exit"用户应该返回到Unix shell.

我不是要求解决方案; 我想知道如何在Ruby中实现这个"shell"功能.如何向用户显示提示和解释命令.

我不需要带有参数的CLI脚本.我需要一些创建shell接口的东西.

fro*_*ion 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
Run Code Online (Sandbox Code Playgroud)

无论如何,这是一个关于如何做到的简单示例,但可能评论中推荐的书更好.但这只是为了让你失望.

一些让你入门的命令是:

somevar = gets
Run Code Online (Sandbox Code Playgroud)

这可以获得用户输入.也许了解一些字符串方法来操纵这个输入可以对你有所帮助.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
Run Code Online (Sandbox Code Playgroud)

无论如何,如果你想要这样的东西,我认为查看http://www.codecademy.com/并不是一个坏主意,基本上他们通过编写像这样的小脚本来教你Ruby.但是,它们可能不完全适应Unix命令,但用户输入和喜欢的东西肯定是处理的.


编辑:

正如所指出的那样,在脚本的顶部使用它:

#!/usr/bin/env ruby
Run Code Online (Sandbox Code Playgroud)

编辑:

举例chomp对比chop:

full_name = "My Name is Ravikanth\r\n" 
full_name.chop! # => "My Name is Ravikanth"
Run Code Online (Sandbox Code Playgroud)

现在,如果您运行chop并且没有换行符:

puts full_name    #=> "My Name is Ravikanth"
full_name.chop!  #=> "My Name is Ravikant"
Run Code Online (Sandbox Code Playgroud)

与:

puts full_name       #=> "My Name is Ravikanth\r\n"

full_name.chomp!  #=> "My Name is Ravikanth"
full_name.chomp!  #=> "My Name is Ravikanth"
Run Code Online (Sandbox Code Playgroud)

请参阅:" Ruby Chop vs Chomp "