12 Punkte von GN⁺ 2024-06-24 | 3 Kommentare | Auf WhatsApp teilen
  • Ruby wird meist mit dem Rails-Framework in Verbindung gebracht, sodass man leicht vergisst, was diese Sprache sonst noch so gut macht
  • Ruby ist eine sehr umfangreiche und ausgereifte Sprache, die besonders beim Schreiben komplexer Shell-Skripte nützlich ist
  • Ziel dieses Artikels
    • die nützlichen Ruby-Funktionen beim Schreiben von Shell-Skripten zu zeigen und sie mit Bash und Python zu vergleichen
    • nicht, Bash-Skripte vollständig durch Ruby-Skripte zu ersetzen

Funktion 1: Externe Befehle aufrufen

  • In Ruby werden zum Aufrufen externer Befehle Backticks(```) verwendet.
  • Zum Beispiel kann man mit Backticks die Ausgabe eines externen Befehls in einer Variablen speichern.
  • Man kann auch system oder popen verwenden.
    `ls`  
    
  • Die Ausgabe des Befehls kann in einer Variablen gespeichert werden.
    my_date=`date`  
    

Funktion 2: Statuscode

  • Mit der Variablen $? kann man den Statuscode des letzten Befehls prüfen
  • Sehr ähnlich zu Bash
    `true`  
    puts $? # 0  
    `false`  
    puts $? # 1  
    

Funktion 3: Typisiertes Sprachmodell

  • Ruby ist keine statisch typisierte Sprache, hat aber Typen.
  • Als objektorientierte Sprache behandelt Ruby alles als Objekt.
  • Anders als bei Bash lassen sich Typen jenseits von Strings sicher verwenden.
    total_lines = `wc -l my_file`.to_i # Ganzzahl mit der Zeilenanzahl der Datei  
    half = total_lines.div 2           # Ganzzahldivision  
    puts `head -n #{half} my_file`     # Gibt die Hälfte der Datei aus  
    

Funktion 4: Funktionale Komposition

  • Ruby implementiert funktionale Operationen wie map, select (Filter), reduce und flat_map als Methoden.
  • Auf die Ausgabe eines Befehls kann map angewendet werden.
    puts `ls`.lines.map { |name| name.strip.length } # Gibt die Länge der Dateinamen aus  
    

Funktion 5: Reguläre-Ausdruck-Matching

  • In Ruby sind reguläre Ausdrücke ein eigener Typ, und Operationen dafür sind eingebaut.
  • Zum Beispiel so kann man den Namen des aktuellen git-Branches abrufen:
    current_branch_regex = /^\* (\S+)/  
    output_lines = `git branch`.lines  
    output_lines.each do |line|  
      if line =~ current_branch_regex # String- und Regex-Matching  
        puts $1                       # Gibt das Match der ersten Gruppe aus  
      end  
    end  
    

Funktion 6: Einfache Threads

  • Ruby macht den Umgang mit mehreren Threads sehr einfach
  • Zum Beispiel nützlich, wenn mehrere Dateien gleichzeitig heruntergeladen werden sollen
    (1..10).map do |i|                       # Iteration von 1 bis 10  
      Thread.new do  
        `wget http://my_site.com/file_#{i}`  # Variablen können im Befehl verwendet werden  
      end  
    end.each { |thread| thread.join }        # do/end und geschweifte Klammern dienen demselben Zweck  
    

Funktion 7: Eingebaute Datei- und Verzeichnisoperationen

  • In Ruby werden alle Dateioperationen als Methoden der Klasse File und Verzeichnisoperationen als Methoden der Klasse Dir bereitgestellt.
  • Anders als bei Python kann man Dateien und Verzeichnisse auf konsistente Weise behandeln.
    exists = File.exists? 'My File'           # Methoden, die einen Booleschen Wert zurückgeben, enden auf '?'  
    file_content = File.open('My File').read  
    File.delete 'My File'                     # Klammern sind optional, wenn es nicht mehrdeutig ist  
    

Fazit

  • Wer komplexe Shell-Skripte ersetzen will, sollte Ruby in Betracht ziehen
  • Das heißt natürlich nicht, dass man Bash komplett aufgeben sollte, aber bei komplexeren Aufgaben kann Ruby die bessere Wahl sein
  • Auch mit Python, Perl oder JS ist das möglich, aber persönlich halte ich Ruby für die vollständigste und am einfachsten nutzbare Sprache

Meinung von GN⁺

  • Ruby unterstützt sowohl objektorientierte als auch funktionale Programmierung und eignet sich damit für verschiedene Programmierstile.
  • Im Vergleich zu Python folgt Ruby einem strengeren objektorientierten Paradigma.
  • Beim Schreiben von Shell-Skripten treten die Vorteile von Ruby umso deutlicher hervor, je komplexer die Aufgaben werden.
  • Rubys Threading-Funktionen erleichtern die Umsetzung paralleler Aufgaben.
  • Datei- und Verzeichnisoperationen sind intuitiv und konsistent gestaltet, was die Produktivität erhöht.

3 Kommentare

 
yangeok 2024-07-05

Als Skriptsprache kann man das durchaus verwenden, haha. Ich kenne die Version zwar nicht, aber auf dem Mac ist es doch standardmäßig installiert, oder?!

 
botplaysdice 2024-06-24

Ruby, das ich einmal sehr geschätzt habe ... Ich hoffe, es bleibt wenigstens auf diese Weise(?) eine Sprache, die viel Liebe bekommt.

 
GN⁺ 2024-06-24
Hacker-News-Kommentare
  • Ruby hat viele Shell-Scripting-Funktionen von Perl übernommen und bietet Optionen, um die Lesbarkeit schrittweise zu verbessern.
  • Mit binding.irb oder binding.pry lässt sich in Skripten interaktiv debuggen.
  • Pathname bietet eine natürlichere API als File.
  • Mit Backticks (`) lassen sich einfache Shell-Befehle ausführen, für komplexere Aufgaben kann man aber die Standardbibliothek von Ruby nutzen.
  • Rubys Threads sind einfach zu verwenden, und mit Parallel wird Parallelverarbeitung noch unkomplizierter.
  • Das auf macOS vorinstallierte Ruby 2.6 ist brauchbar, aber ein Upgrade auf eine aktuelle Version ist empfehlenswert.
  • Ruby ist eine großartige Sprache, aber die Editor-Unterstützung ist im Vergleich zu Python schwächer.
  • Backticks (`) zur Ausführung von Shell-Befehlen zu verwenden ist ineffizient und kann sich je nach Betriebssystem unterschiedlich verhalten.
  • Rubys Inline-Abhängigkeitsverwaltung ist sehr nützlich und bietet eine ähnliche Funktionalität wie Deno.
  • Ruby ermöglicht es, schönen Code zu schreiben, und eignet sich gut für kleine Skripte.
  • Ruby ist sehr nützlich für das Schreiben komplexer Automatisierungsskripte, und vieles ist einfacher als mit bash oder PowerShell.
  • Ruby wird in Unternehmen mit großen Rails-Monolithen weiterhin häufig für Scripting und die Erstellung von Tools verwendet.
  • In Umgebungen ohne Internetzugang ist es wichtig, eine Sprache zu verwenden, die in der Standarddistribution installiert ist.
  • Ruby ist nützlich zum Schreiben von Shell-Autovervollständigungsskripten und erlaubt es, schnell Utilities zu bauen. Rails eignet sich gut zum Erstellen eines MVP.