从模块调用代码并执行它,因为菜单中有一个选择选项

时间:2017-10-13 08:56:18

标签: crystal-lang

我不明白为什么当我执行我的代码时,我选择了他没有做任何事情的第一个选项。 你会在下面找到我的水晶脚本的代码。

require "colorize"
class Application

  def initialize
    mainMenu
  end

  def mainMenu
    puts "you are going to install the software?"
    puts " 1: To install the soft you have to be root".colorize.fore(:red).bold
    puts " 2: Modify module"

    case gets
    when "1"
      puts "installation of the software.."
      install_soft

    when "2"
      puts "you chose option2"
    end
  end

  Application.new
end

这是我的安装模块的代码,其中包含methode install_soft。 他正确地打印了puts " you are ..",但它没有做任何其他事情:(

module InstallSoft
  def install_soft
    puts "you are in def install_soft "
    output = IO::Memory.new
    Process.run("bash", args: {"eole/lib/bash_scripts/installation.sh"}, output: output)
    output.close
    output.to_s
  end
end

3 个答案:

答案 0 :(得分:0)

那么,该怎么办?您在内存IO中收集进程的标准输出并将其转换为字符串。

如果要将进程的stdout打印到应用程序的stdout,则必须转发它(使用STDOUT而不是内存IO)或将内存IO的内容打印到stdout (puts install_soft)。

答案 1 :(得分:0)

我找到了使用

的解决方案
 Process.run("lib/bash_scripts/installation.sh", shell: true, output: output)
          output.close
          output.to_s

但目前我无法得到我的剧本的输出:(

答案 2 :(得分:0)

我找到了一个解决方案,可以看到带有输出的堆栈:true

 Process.run("lib/bash_scripts/installation.sh", shell: true, output: true, error: true)