module Shellwords

Manipuliert Strings wie die UNIX Bourne Shell

Dieses Modul manipuliert Strings gemäß den Wortanalyse-Regeln der UNIX Bourne Shell.

Die Funktion shellwords() war ursprünglich ein Port von shellwords.pl, wurde aber modifiziert, um mit dem Shell & Utilities Band des IEEE Std 1003.1-2008, 2016 Edition konform zu sein.

Verwendung

Sie können Shellwords verwenden, um einen String in ein für die Bourne Shell freundliches Array zu parsen.

require 'shellwords'

argv = Shellwords.split('three blind "mice"')
argv #=> ["three", "blind", "mice"]

Sobald Sie Shellwords require'd haben, können Sie den Alias split String#shellsplit verwenden.

argv = "see how they run".shellsplit
argv #=> ["see", "how", "they", "run"]

Sie behandeln Anführungszeichen als Sonderzeichen, sodass ein nicht übereinstimmendes Anführungszeichen einen ArgumentError verursacht.

argv = "they all ran after the farmer's wife".shellsplit
     #=> ArgumentError: Unmatched quote: ...

Shellwords bietet auch Methoden, die das Gegenteil tun. Shellwords.escape, oder sein Alias String#shellescape, maskiert Shell-Metazeichen in einem String für die Verwendung in einer Befehlszeile.

filename = "special's.txt"

system("cat -- #{filename.shellescape}")
# runs "cat -- special\\'s.txt"

Beachten Sie das „–“. Ohne es würde cat(1) das folgende Argument als Befehlszeilenoption behandeln, wenn es mit „-“ beginnt. Es ist garantiert, dass Shellwords.escape einen String in eine Form konvertiert, die eine Bourne Shell wieder in den ursprünglichen String parst, aber es liegt in der Verantwortung des Programmierers sicherzustellen, dass die Übergabe eines beliebigen Arguments an einen Befehl keinen Schaden anrichtet.

Shellwords kommt auch mit einer Core-Erweiterung für Array, Array#shelljoin.

dir = "Funny GIFs"
argv = %W[ls -lta -- #{dir}]
system(argv.shelljoin + " | less")
# runs "ls -lta -- Funny\\ GIFs | less"

Sie können diese Methode verwenden, um eine vollständige Befehlszeile aus einem Array von Argumenten zu erstellen.

Autoren

Kontakt