2017-05-02 43 views
1

如何确保我的Ruby命令行程序将清除屏幕,而不管它是在Windows,MacOSX还是基于Linux的发行版上?跨平台Ruby方法来清除终端屏幕

如果我在Windows上,命令是这样的:

system('cls') 

而在Linux在Mac上这将是这样的:

system('clear') 

回答

1
def clear_screen 
    puts "Going to clear the screen" 
    if RUBY_PLATFORM =~ /win32|win64|\.NET|windows|cygwin|mingw32/i 
    system('cls') 
    else 
    system('clear') 
    end 
end 
0

这是值得牢记结算程序中的屏幕可能是你想要的行为,但是如果不是对习惯于更多UNIX风格环境的人的彻头彻尾的愤怒,它可能会令人恼火:杀死它们的回滚历史是非常粗鲁的。

更多的Ruby和POSIX处理方式是通过CursesDocumentation),一个跨平台的库,它可以让您对如何使用屏幕打印东西有很大的控制权,非常适合构建终端式交互应用程序。

你最终的东西是这样的:

#!/usr/bin/env ruby 

require 'rubygems' 
gem 'curses' 
require 'curses' 

Curses.init_screen 

begin 
    Curses.crmode 

    # Do your calculations here, and to print: 
    Curses.addstr("(program output)\n") 

    Curses.addstr("Press any key to continue...") 

    Curses.refresh 

    Curses.getch 

ensure 
    Curses.close_screen 
end 

诅咒是不是一个“清屏”工具多了很多,你可以在滚动,多个窗口增加,各种各样的事情,当你退出如果调用close_screen,程序会将您的终端恢复到与之前完全相同的状态。这就是为什么它在ensure块中,以避免在程序崩溃时造成事故。

+0

在哪个系统上“清除”杀死回滚历史记录? –

+0

取决于您的终端设置。在某些情况下,它只是在整个页面中强制空白行。无论如何,调用'clear'只是粗鲁无礼。如果我想让我的屏幕清除,我会按下清除它的快捷键,如“CTRL + L”。 – tadman