definieren Sie ein function-like makro in bash
Ist es möglich zu definieren, eine makro-Funktion in der bash, also wenn ich Schreibe:
F(sth);
bash ausgeführt wird dies:
echo "sth" > a.txt;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beliebige syntax können nicht gemacht werden, etwas zu tun. Klammern sind Metazeichen die eine Besondere Bedeutung haben, um den parser, so gibt es keine Weise, die Sie Sie verwenden können, wie gültig Namen. Der beste Weg, erweitern Sie die shell ist die Definition von Funktionen.
Wäre dies ein basic
echo
wrapper, der schreibt immer in die gleiche Datei:Dies gilt etwa das gleiche, aber zusätzlich handles stdin - opfern
echo's
-e
und-n
Optionen:Kann aufgerufen werden, wie
oder
Funktionen übergebenen Argumente in der gleichen Weise wie alle anderen Befehle.
Den zweiten echo-wrapper wie erste tests für einen setzen Sie das erste argument, oder von stdin kommen aus einem nicht-tty, und bedingt Aufrufe von printf verwenden Sie entweder das positions-Parameter falls gesetzt, oder von stdin. Der test-Ausdruck vermeidet die bei beiden null Argumente und keine Umleitung aus einer Datei, in dem Fall Bash versuchen würde, den ausbau der Ausgang des Flughafenterminals, hängen die shell.
cat
- dies erfordert ein system mit real - /dev/fd/*. Ich habe gerade gebucht diese trick da meine Vorherige Antwort war die gleiche wie die anderen. 🙂echo
tut. Ihre Funktion arbeitet mitf one two three
während die anderen arbeiten nur mitf "one two three"
. Gegeben Eingabe, ohne den qotes, die anderen Lösungen würden nur das erste Wort (hier: "one") zu berücksichtigen.Verwenden Sie keine Klammern, wenn Sie es nennen. Dies ist, wie Sie es nennen:
Ja, nur sollten Sie es nennen mit
F sth
:Lesen Sie mehr hier.
Dies wurde beantwortet vor langer Zeit, aber eine Antwort erfüllt, dass die ursprüngliche Anfrage (obwohl, das ist wahrscheinlich nicht das, was eigentlich gewünscht):
Diese basiert auf Magic-Aliase: Eine Schichtung Lücke in der Bourne-Shell von Simon Tatham.