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

标签 ruby shell

我的任务是编写一个简单的 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

编辑:

chompchop 的示例:

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/

相关文章:

ruby - 通过 Ruby 更改目录

shell - shell脚本中双引号内的单引号

linux - 访问引用两次的变量 UNIX

linux - 用于删除 craskernel 的 Shell 脚本

linux - 如何循环遍历目录中的文件,然后将它们读入 bash 中的字符串变量

表格格式的 Shell 脚本打印

ruby - 你怎么称呼 & : operator in Ruby?

ruby - 在 Ruby 解释器段错误之后,是否可以从核心文件中获取 Ruby 回溯?

ruby : Split string on boundaries

ruby-on-rails - 如何返回 Ruby 字符串中最后一个斜杠 (/) 之后的所有内容