Bash: Programmgesteuertes Abrufen der Abschlussausgabe eines Befehls (z. B. in einer Variablen)

Wie kann ich programmgesteuert auf die Ausführung eines anderen Befehls zugreifen?

Angenommen, mein aktuelles Verzeichnis enthält Dateiena1, a2, unda3Wie kann ich dann meinen Befehl veranlassen, die automatische Vervollständigung von aufzurufen?ls a zurück zu bekommena1 a2 a3?

Ist das möglich?

Klarstellung und Begründung:

Ich entschied michls weil die Leute sich darauf beziehen können. Es ist ein ausgedachtes Beispiel, aber lassen Sie mich versuchen, den Wert dieser Funktion zu veranschaulichen. Ich habe einen Befehl angerufenbuild Wenn ein Verzeichnis angegeben wird, kann es automatisch zu den Zielen vervollständigt werden, die in diesem Verzeichnis erstellt werden können. Diese Ziele entsprechen möglicherweise nicht den Dateien aus diesem Verzeichnis. Die Ziele könnten durch die abgebaut werdenbuild Befehl aus einer Build-Datei, die ich nicht analysieren möchte. Mit anderen Worten:

build path/to/dir/TABTAB

Könnte geben:

path/to/dir/a_target
path/to/dir/b_target

build ist ein bereits vorhandener Befehl, den ich nicht an meine Zwecke anpassen kann. Und die Art und Weise, wie es seine Ziele extrahiert, möchte ich mit Sicherheit nicht wissen.

Angenommen, ich habe ein vollständiges Repository vonbuildfähige Projekte, und die meisten meiner Arbeit und damit die meisten meinerbuild Arbeit geschieht in nur einem Projekt. Mit anderen Worten, ich immerbuild irgendein Ziel untermy/project/directory.

So weit, ist es gut.

Ich möchte also einen Wrapper um den Build-Befehl schreiben, der es nicht erforderlich macht, den Verzeichnispfad jedes Mal einzugeben, wenn ich ihn ausführe. Ich möchte, dass mein bevorzugtes Projektverzeichnis (oder die Verzeichnisse, warum nicht) bekannt ist, und dass ich auf die Ziele verweise, ohne sie zu qualifizieren:

Also unter der Annahme, dass ich:

my/project/directory/a_target
my/project/directoryb_target

Ich will das:

mybuildTABTAB

mir geben:

a_target
b_target

Natürlich muss ich den Beendigungscode für schreibenmybuild, aber ich möchte es auf die Fertigstellung verlassen fürbuild, weil ich nicht einfach die Entwickler von fragen kannbuild um abuild listtargets befehle nur um mich glücklich zu machen. Dieses Feature ist bereits in der Fertigstellung für dabuildUnd ich muss darauf zugreifen.

(Natürlich, wenn ich rennemybuild a_targetwird es wissen zu laufenbuild my/project/directory/a_target, und dass ich weiß, wie man das umsetzt und nicht im Rahmen dieser Frage ist.)

Ich hoffe, das zeigt, warum ich die Fertigstellung derbuild befehle und benutze es als Blackbox.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage