Ist es möglich, einen Bash-Alias ​​zu erstellen, der eine bestimmte Zeichenfolge in Terminal eingibt?

Ist es möglich, einen Bash-Alias ​​zu erstellen, der beim Ausführen eine Zeichenfolge meiner vorherigen Wahl in Terminal eingibt?

Nehmen wir an, das ist in meinem ~/.bash_profile:

alias start_youtube="cd ~/Video/Youtube; **[PASTE: youtube-dl URL]**"

Stellen Sie sich Folgendes vor: Der Alias ​​würde das Verzeichnis ändern in Video/Youtubeund dann [PASTE] die Zeichenfolge: youtube-dl URL. Es könnte Return ⏎die Zeichenfolge entweder tun oder vorzugsweise einfach youtube-dl URLin der Terminal-Eingabeaufforderung belassen, damit ich die Platzhalter-URL gegen eine echte URL austauschen kann.

Wenn ich versuche, den Alias ​​unten tatsächlich auszuführen;

alias start_youtube="cd ~/Video/Youtube; youtube-dl URL"

Es wird den Befehl wie eingegeben ausführen, wodurch youtube-dl einen Fehler wie "URL konnte nicht analysiert werden" zurückgibt - was in Ordnung gewesen sein könnte. Aber das Drücken der Taste zeigt nicht die letzte Eingabe des Alias ​​( youtube-dl URL), sondern zeigt eher den Aufruf des Alias ​​( start_youtube) [was meiner Meinung nach normalerweise vorzuziehen ist].

Die angeforderte Lösung besteht also darin, eine Platzhalterzeichenfolge in die Eingabeaufforderung einzufügen oder irgendwie über die Shell auf den Verlauf des Alias-Befehls zuzugreifen.

Antworten (2)

Hier ist, wie ich es angehen würde. Verwenden Sie diese verwandte Frage , um die Funktion zu schreiben, die sich in Ihrem bashrcoder befinden würde bash_profile. Fügen Sie dann eine Zeile in der Funktion hinzu, die die letzte Zeile in Ihrem Bash-Verlauf damit löschen würde

Ich habe mich für etwas dazwischen entschieden. Erstellt eine Funktion, die die "Platzhalterzeichenfolge" echoistcd , die ich kopieren, bearbeiten und eingeben kann, sobald der Alias ​​das gewünschte Verzeichnis hat. Ich habe nicht verstanden, wie man vom Alias ​​aus auf den Bash-Verlauf zugreift oder warum man Zeilen daraus löscht, weil die Tastatur ↑ die im Alias ​​verwendeten Befehle afaik nicht anzeigt.

Sie könnten osascriptdafür verwenden und die Systemereignisse anweisen, Schlüssel für Sie einzugeben. Generell rate ich dringend von dem ganzen Ansatz ab, Tastenanschläge blind an die Shell zu senden, damit können Sie Ihr System verwüsten!

osascript -e 'tell application "Terminal" to activate' -e 'tell application "System Events" to keystroke "# cd /tmp; your text" '

Aus Sicherheitsgründen sende ich das Kommentarzeichen #als erstes Zeichen, aber diese Zeile liefert das gewünschte Ergebnis. Der Cursor wartet hinter Ihrem Text und Sie können mit der Eingabe fortfahren.