2016-11-27 2 views
2

Gibt es eine Möglichkeit, einen Befehl wie last in einem Ruby-Skript aufzurufen? Ich kann %x verwenden, um Befehle wie ls und ls -l innerhalb eines Skripts aufzurufen, aber wäre das akzeptabel für die komplexen und ständig erweiternden Protokollinformationen, die vom letzten Befehl bereitgestellt werden?Aufruf eines Befehls in einem Ruby-Skript

+0

Siehe http://stackoverflow.com/questions/754494/reading-the-last-n-lines-of-a-file-in-ruby für einen 'last'-Befehl in Ruby. – knut

Antwort

2

Hier ist ein Beispiel, den Benutzernamen, IP, Inbetriebnahme und Dauer abzurufen:

%x(last -i).each_line do |line| 
    line.chomp!        # Removes newline 
    break if line.empty?     # last is done 

    # 3 possibilities to extract information : 
    user, *other_columns = line.split(' ') # 1. Use split 
    start = Time.parse(line[39,16])   # 2. Use known position of a column 
    ip = line[22,17].strip 
    if line =~/\((\d+):(\d+)\)/    # 3. Use a regex 
    duration = $1.to_i*60+$2.to_i 
    else 
    duration = nil 
    end 

    info={user: user, ip: ip, start: start, duration: duration} 
    #TODO: Check that user isn't "reboot" 
    puts info 
end 


# {:user=>"ricou", :ip=>"0.0.0.0", :start=>2016-11-01 21:29:00 +0100, :duration=>141} 
# {:user=>"ricou", :ip=>"0.0.0.0", :start=>2016-11-01 15:21:00 +0100, :duration=>57} 

Welche Informationen benötigen Sie genau?

+0

Die IP-Adressen. Ich dachte mir, ich könnte Match verwenden, um sie zu isolieren, sobald ich herausgefunden habe, wie ich zuletzt arbeiten kann. – yukimoda

+0

Ich habe den Code aktualisiert. Möglicherweise müssen Sie überprüfen, dass die Spalten die gleiche Breite wie meine haben. –

Verwandte Themen