Hinzufügen von Befehlsverknüpfungen zu / bin

8

Gibt es eine Möglichkeit, benutzerdefinierte Befehle hinzuzufügen /bin?

Zum Beispiel benutze ich docker container lsviel und möchte dies in einen Verknüpfungsbefehl verwandeln, wie z dcls.

Wenn ich eine Datei hinzufügen Namen dclszu /binund in der Datei, geben Sie den genauen Befehl docker container ls, gehe ich davon aus das würde nicht funktionieren.

Was ist der richtige Weg, wenn es einen gibt, so etwas zu tun?

alex067
quelle
6
Nicht hinzufügen zu /bin, Sie können hinzufügen zu ~/bin(einem Bin in Ihrem eigenen Verzeichnis) oder zu /usr/local/bin(um es für alle Benutzer Ihres Systems freizugeben, ohne den Paketmanager zu beeinträchtigen). Oder besser in diesem Fall, um einen Alias ​​zu verwenden.
Strg-Alt-Delor

Antworten:

24

Eine einfache Möglichkeit für eine Verknüpfung besteht darin, eine zu definieren alias

alias dcls='docker container ls'

Dies wird ausgeführt, docker container lswenn Sie eingeben dclsund der Befehl aliasIhre definierten Aliase auflistet. Um diesen Alias ​​zu entfernen, verwenden Sie unalias dcls.

Wenn Sie bash verwenden, können Sie den Alias ​​in Ihrem ~/.bashrcoder speichern ~/.bash_aliases.

Wenn Ihr ~/.bash_aliasesbeim Start nicht gelesen wird, können Sie diese Zeile zu Ihrem hinzufügen ~/.bashrc:

[ -f ~/.bash_aliases ] && . ~/.bash_aliases
Freddy
quelle
Danke Freddy! Muss ich diesen Alias ​​bei jedem Neustart des Servers erstellen? Oder ist es an mein Benutzerprofil gebunden?
Alex067
2
Sie müssen es in der Shell-Startdatei Ihres Benutzers speichern ~/.bashrcoder ~/.profileoder ... Wenn Sie den Alias ​​nicht speichern, geht er verloren, wenn Sie sich abmelden oder das Terminal schließen.
Freddy
Danke noch einmal. Was ist, wenn wir keinen .bashrc oder .profile in unserem ~ Ordner haben?
Alex067
1
"Ja wirklich?" Was für ein seltsamer Server! Wenn Sie bash verwenden, können Sie echo "alias dcls='docker container ls'" >> ~/.bashrces mit erstellen , dann als Quelle verwenden . ~/.bashrcoder sich abmelden und erneut anmelden.
Freddy
Prost auf deine Hilfe, hat es geschafft!
Alex067
15

Eigentlich würde das, was Sie beschreiben, mit ein paar Anmerkungen funktionieren:

  1. Sie könnten einfach docker container lsin eine Datei namens setzen /bin/dcls. Das Verhalten kann jedoch etwas kompliziert sein. Es ist etwas zuverlässiger, die Datei mit einer Zeile zu beginnen, die als "shebang" bezeichnet wird, damit die Datei so aussieht
    #! / bin / sh
    Docker Container ls
    Dies gibt an, dass die Datei ein Shell-Skript ist.
  2. Bevor Sie den Befehl ausführen können, müssen Sie die Datei mit einem Befehl wie ausführen
    chmod + x / bin / dcls
    Sie müssen wahrscheinlich root sein, um dies zu tun (dh es mit auszuführen sudo).
  3. Befolgen Sie die beiden oben genannten Schritte, und Sie können eingeben, dcls und es wird funktionieren docker container ls. Aber wenn Sie tippen dcls -l foo, wird es immer noch tun docker container ls. Wenn Sie möchten, dass es funktioniert docker container ls -l foo, sollten Sie das Skript so ändern, dass es sagt

    #! / bin / sh
    Docker-Container ls "$ @"
    Dies gibt an, dass alle Argumente, die Sie in die dclsBefehlszeile eingeben, an den Befehl übergeben werden sollen docker container ls.

    Natürlich gibt es kompliziertere Dinge, die Sie mit Befehlszeilenargumenten tun können.

Für eine Zuordnung eines einfachen Befehls → eines einfachen Befehls, der nicht mit anderen Benutzern geteilt werden muss, ist es einfacher, einen Alias ​​( wie von Freddy vorgeschlagen ) oder eine Shell-Funktion zu definieren. Kompliziertere Funktionen werden oft als Skripte geschrieben. dh Textdateien, die Befehle enthalten. Wenn Sie es jedoch nicht für andere Benutzer freigeben müssen, verwenden Sie häufiger ein privates binVerzeichnis.

$ cd                                     # (in Ihr 
Ausgangsverzeichnis ) $ mkdir bin
Dann kopieren dclsnach $HOME/binund hinzufügen
export PATH = "$ HOME / bin: $ PATH"
zu deinem ~/.bashrc.

Es ist auch üblich, persönliche Skripte abzulegen /usr/local/binund die /binmit dem System gelieferten Programme zu verlassen .

G-Man sagt "Reinstate Monica"
quelle
Gute Antwort. Wenn ich es wie erwähnt zu bin hinzufüge, würde das alle Benutzer korrekt betreffen?
Alex067
Ja; alle Benutzer sehen in /bin,  /usr/binund in der Regel freigegebene Verzeichnisse wie /usr/local/bin und manchmal /opt, so dass Programme in diesen Verzeichnissen für alle Benutzer zur Verfügung stehen.
G-Man sagt "Reinstate Monica"
1
Wenn Sie mit anderen auf Ihrem System teilen möchten, verwenden Sie es, /usr/local/bindamit es den Paketmanager nicht beeinträchtigt.
Strg-Alt-Delor
5
+1 für die Empfehlung $HOME/bin. Sie sollten dies wirklich verwenden. Dies ist nicht nur der richtige Bereich, sondern hilft auch, wenn Sie Ihr System neu installieren (und behalten HOME), Ihren benutzerdefinierten Befehl nicht zu verlieren.
Allo
1
FWIW benutze ich ~/.local/bin stattdessen .
Sparhawk
0

Wenn nur für Sie, ist ein Alias ​​in Ordnung, aber gemäß der Linux-Dateisystemhierarchie Standard gehen lokale systemweite Skripte /usr/local/bin/nicht ein /bin.

  1. Obwohl es sicherlich funktionieren würde /bin, ist es besser, sich an Standards zu halten, insbesondere wenn Ihre Software beim Kunden bereitgestellt wird.
  2. Wenn Ihr Skript optional wäre, sollte es eingehen /opt
  3. Das Skript selbst wäre:

    #!/bin/bash
    #
    # Version 1.0 DD 2019-05-04
    # dcls = docker container ls
    docker container ls "@0"
    if [[ $? -eq 0 ]]; then
      echo -e "Errors encountered..."
      exit 1
    fi
    
Fabby
quelle