Frage Wie erstelle ich eigene Terminalbefehle [duplizieren]


Diese Frage hat hier bereits eine Antwort:

Ich weiß, wie ich meine eigenen Terminal-Befehle erstelle, und das wäre wirklich nützlich für mich beim Kompilieren aller meiner Java-Klassen in einem Ordner. Ich sehe auch, dass Leute dafür normalerweise einen Ordner ~ / bin erstellen und Dateien .sh mit den Zeilen versehen, die sie ausführen möchten, aber ich konnte es nicht gut verstehen, ich erstelle zum Beispiel eine compile.sh mit einigen Zeilen

-gcc file -o file
-gcc file1 -o file1

aber während ich gelesen habe, muss ich auch eine Zeile zu einer Datei namens .bashrc hinzufügen, die in meinem Home-Ordner versteckt ist, und ich weiß nicht, wie das geht, ist es einfacher, diese Datei zu bearbeiten? Nachdem ich es gemacht habe, wird mein benutzerdefinierter Befehl der Name der .sh-Datei sein (kompilieren)?


7
2018-06-20 21:34


Ursprung


Ich glaube, Sie interessieren sich für grundlegende Shell-Skripte; Es gibt viele Tutorials und Ressourcen online, wenn Sie nach "Linux Basic Shell Scripting" (oder ähnlich) suchen. Die vorhandenen Ressourcen können es wahrscheinlich klarer und gründlicher erklären als wir es hier können - Nick Weinberg
Sobald Sie wissen, wie Sie Ihre eigenen Skripte erstellen, stoppen Sie und finden Sie ein einfaches Tutorial für make. Es ist das richtige Werkzeug, um die Zusammenstellung Ihrer Projekte zu kontrollieren. - alexis
Urgh, ich hasse den dupigen Hammer manchmal. Die Täuschung ist für diesen Teil: "[Ich] muss eine Zeile zu einer Datei namens. Bashrc hinzufügen, die in meinem Home-Ordner versteckt ist und ich weiß nicht, wie das geht, ist es einfacher, diese Datei zu bearbeiten" - was Sie tun wollen, ist Ihren Befehl zum hinzufügen PATH. - muru


Antworten:


Die einfachste Möglichkeit, Bash-Skripts für alle Benutzer Ihres Computers verfügbar zu machen, besteht darin, sie zu platzieren /usr/local/bin. Dies erfordert jedoch Administratorrechte.

  1. Erstelle dein Skript:

    Öffnen Sie Ihren bevorzugten Texteditor und schreiben Sie alle Befehle, die das Skript ausführen soll, einen Befehl pro Zeile.

    Sie können Bash-Skripten Kommentare hinzufügen, indem Sie eine Zeile mit beginnen #.

    Wenn Sie fertig sind, fügen Sie diese genaue Zeile als erste Zeile oben in Ihrem Skript hinzu. Es heißt "Shebang" und teilt der Shell mit, mit welchem ​​Interpreter Sie Ihr Skript ausführen.

    #!/bin/bash
    

    Hier sehen Sie ein einfaches Beispiel für ein vollständiges Skript, in dem die beiden Befehle ausgeführt werden, die Sie in Ihrer Frage erwähnt haben:

    #!/bin/bash
    
    # Compile 'file':
    gcc file -o file
    # Compile 'file1':
    gcc file1 -o file1
    
  2. Verschieben Sie Ihr Skript an den richtigen Speicherort:

    Der Ort, an dem Sie eigene Skripte für alle Benutzer platzieren sollten, ist /usr/local/bin.

    Da dieses Verzeichnis dem Benutzer gehört root, Sie müssen ein Administrator sein und verwenden sudo um Dateien dorthin zu verschieben.

    Ich nehme an, Sie haben Ihr Skript in Ihrem Home-Verzeichnis erstellt, ~/my_script.sh. Öffnen Sie einfach ein Terminal und geben Sie den folgenden Befehl ein SCRIPTNAME mit dem Namen, den du ihm geben willst. Dieser Name ist der Befehl, den Sie eingeben müssen, um ihn auszuführen. Das .sh Dateierweiterung ist nicht notwendig.

    sudo mv ~/myscript.sh /usr/local/bin/SCRIPTNAME
    
  3. Legen Sie den richtigen Besitzer und die richtigen Berechtigungen fest:

    Das Skript sollte im Besitz von und Schreibrechte für sein root, aber für alle lesbar und ausführbar. Die folgenden zwei Befehle stellen dies sicher:

    sudo chown root: /usr/local/bin/SCRIPTNAME
    sudo chmod 755 /usr/local/bin/SCRIPTNAME
    
  4. Führen Sie Ihr Skript aus und genießen Sie:

    Jetzt können Sie einfach tippen SCRIPTNAME (oder wie auch immer Sie es genannt haben) zu Ihrem Terminal und das Skript wird ausgeführt.


8
2018-06-20 22:03



Viele dieser Dummheiten können vermieden werden, indem Dinge hineingelegt werden ~/.local/bin stattdessen; Ubuntu (und vielleicht auch Debian?) Verbindet automatisch dot-folder im Home-Verzeichnis mit denen, wo sie sich befinden würden /usr/. Der Hauptvorteil ist, dass Ihr Home-Verzeichnis zwischen Upgrades portierbar wird (besonders wenn Sie das Home-Verzeichnis separat installieren), so dass Sie nie die benutzerdefinierten kleinen Befehle verlieren. - Andrew Keech
@AndrewKeech Ich habe es gerade versucht und es hat nicht funktioniert. Ein besserer Ort für Benutzer-Skripte ist ~/bin, weil Ubuntu es automatisch hinzufügt $PATH. Sehen Hier. - wjandrea
Ich habe alles in dieser Antwort gemacht und mir sehr gut gearbeitet, aber Andrew's Art funktionierte auch hier nicht @wjandrea - Vitor Costa
Oh, ganz richtig! schau auf meinen eigenen $ PATH muss ich hinzugefügt haben /home/<user>/.local/binmich selber. Wie dem auch sei, ich denke, es ist das Beste, alles, wo du dich machst, irgendwo hinzustellen ~/ um es während Wipe-Clean-Upgrades zu behalten - Andrew Keech
@VitorCosta wjandreas Vorschlag wird funktionieren; Ich empfehle auch, benutzerdefinierte Skripts zu installieren ~/bin eher, als /usr/local/bin für die Portabilität. - edwinksl


Während das Schreiben von Skripten ist eine sehr bequeme Art und Weise auszuführen viele Befehle aus einer Datei Ich würde vorschlagen, Funktionen zu verwenden, wo nur ein oder zwei Befehle benötigt werden.

Nimm zum Beispiel die Funktionsdefinition unten

compile()
{
  gcc "$1" -o "${1%%.*}" && printf "<<< Compiled successfully\n"
}

Indem Sie es in Ihre einfügen .bashrc Datei (und dann läuft source ~/.bashrc oder Öffnen eines neuen Terminal-Tabs), können Sie diesen Befehl von überall ausführen, ohne zu haben ~/bin hinzugefügt zu Ihrem PATH Variable, und geben Sie einen Dateinamen als Befehlszeilenargument wie

compile somecode.c

Als Randnotiz können Sie diese Datei nur durch Aufruf bearbeiten gedit ~/.bashrc von der Befehlszeile

Für diejenigen von euch, die sich fragen, was "$1" und "${1%%.*}" , das "$1" bezieht sich auf den ersten Befehlszeilenparameter (in diesem Fall "somecode.c" ), wie für "${1%%.*}" - das ist die Parametererweiterung, besonders die, die Suffix entfernt, und alles nach dem Punkt wegwerfen wird. Mit anderen Worten, das dreht sich somecode.c in somecode  . Für weitere Informationen lesen Bash Handbuchseite Abschnitt über Parametererweiterung


4
2018-06-20 23:00



~/bin ist in $PATH standardmäßig. Sehen Hier. - wjandrea
1. ~/bin ist da standardmäßig .bashrc Quellen .profile ; Es ist nicht standardmäßig dort, wenn Sie oder Ihr Systemadministrator entscheiden, eine andere Shell und 2. verwenden. Das ist nicht der Punkt. Der Punkt ist, dass das Schreiben von Shell-Funktionen über Skripts einige Vorteile hat - Sergiy Kolodyazhnyy
Ich bin ein bisschen faul, bash jetzt zu lernen, würde es Ihnen etwas ausmachen, mir den Befehl zu geben, den ich ausführen würde, nachdem ich @Serg kompiliert habe? - Vitor Costa
Was meinen Sie ? - Sergiy Kolodyazhnyy


Bevor ich darauf eingehe, möchte ich klarstellen, dass Sie keine neuen Befehle erstellen, sondern Skripte erstellen, die als ausführbare Dateien ausgeführt werden können. Sie können sich jedoch wie ein Befehl verhalten, da Sie sie von überall ausführen können.

Wenn Sie in Ihrem Home-Ordner keinen Ordner namens "bin" haben, erstellen Sie einen Ordner.

Öffnen Sie nun ein Terminalfenster und geben Sie ein nano ~/.bashrc.

Dies öffnet einen Editor. Fügen Sie am Ende dieser Datei eine neue Zeile hinzu, die besagt PATH="$HOME/bin:$PATH".

Speichern Sie die Datei jetzt durch Drücken von STRG + O (der Buchstabe o, nicht Null), und drücken Sie dann die EINGABETASTE. Beenden Sie den Editor mit STRG + X. Melden Sie sich ab und wieder an, damit die Änderungen wirksam werden, oder starten Sie den Computer neu, wenn dies nicht funktioniert.

Jetzt können Sie auf alle Skripte, die Sie in Ihrem bin-Ordner erstellen, überall in einem Terminalfenster zugreifen.

Sie können diese Skripte entweder mit nano oder gedit (dem grafischen Ubuntu-Texteditor) oder einem beliebigen Texteditor erstellen. Denken Sie daran, das Skript im ~ / bin-Ordner zu speichern und die Datei ausführbar zu machen. Es gibt 2 Möglichkeiten, dies zu tun:

GUI: Klicken Sie mit der rechten Maustaste auf die Datei und gehen Sie zur Registerkarte Berechtigungen und aktivieren Sie das Kontrollkästchen "Ausführung als Programm zulassen".

TERMINAL : chmod +x /location/of/your/file


2
2018-06-20 21:55



Dies ist ein guter Rat, aber ausführbare Skripte sind neue Befehle - alexis
@alexis stimme ich nicht zu. Ein Skript ist ein Skript. Ein Skript führt Befehle aus. Bash verfügt über eine Reihe von Befehlen, die Sie mit einer Programmiersprache in Form eines Skripts ausführen können. - Dorian
Einige dieser Befehle (die sind nicht von bash zur Verfügung gestellt, aber von der Unix-Umgebung) sind Shell-Skripte :-) Hast du reingeschaut /usr/bin vor kurzem? Nennen Sie sie, was Sie wollen, aber korrigieren Sie nicht das OP, um sie Befehle zu nennen. - alexis