Ich bin (wirklich) Neuling in der funktionalen Programmierung (tatsächlich hatte ich nur mit Python Kontakt), aber es scheint ein guter Ansatz für einige listenintensive Aufgaben in einer Shell-Umgebung zu sein.
Ich würde gerne so etwas machen:
$ [ git clone $host/$repo for repo in repo1 repo2 repo3 ]
Gibt es eine Unix-Shell mit solchen Funktionen? Oder vielleicht eine Funktion, die einen einfachen Shell-Zugriff (Befehle, env / vars, readline usw.) aus Python heraus ermöglicht (die Idee ist, den interaktiven Interpreter von Python als Ersatz für bash zu verwenden).
BEARBEITEN:
Vielleicht würde ein Vergleichsbeispiel klarstellen. Nehmen wir an, ich habe eine Liste bestehend aus dir / file :
$ FILES=( build/project.rpm build/project.src.rpm )
Und ich möchte eine wirklich einfache Aufgabe erledigen: Kopieren Sie alle Dateien nach dist / UND installieren Sie sie im System (es ist Teil eines Build-Prozesses):
Bash benutzen:
$ cp $ {files [*]} dist / $ cd dist && rpm -Uvh $ (für f in $ {files [*]}; mache den Basisnamen $ f; fertig)
Verwenden eines "Pythonic Shell" -Ansatzes (Vorsicht: Dies ist imaginärer Code):
$ cp [os.path.join ('dist', os.path.basename (file)) für file in FILES] 'dist'
Kannst du den Unterschied sehen? DAS ist es, wovon ich rede. Wie kann man eine Shell mit solchen eingebauten Sachen noch nicht verlassen? Es ist ein echtes Problem, mit Listen in der Shell umzugehen, auch wenn es eine so häufige Aufgabe ist: Liste der Dateien, Liste der PIDs, Liste von allem.
Und ein wirklich, wirklich wichtiger Punkt: Verwenden von Syntax / Tools / Features, die jeder bereits kennt: sh und Python.
IPython scheint auf einem guten Weg zu sein, aber es ist aufgebläht: Wenn der Variablenname mit '$' beginnt, tut es dies, wenn '$$', tut es das. Die Syntax ist nicht "natürlich", so viele Regeln und "Problemumgehungen" ( [ ln.upper() for ln in !ls ]
-> Syntaxfehler)