Frage Wie erstelle ich einen permanenten Bash-Alias?


Ich möchte gerne einen Alias ​​erstellen rm Befehl, um nach dem Ausführen dieses Befehls eine Bestätigungsmeldung zu erhalten. Also erstelle ich einen Alias ​​wie diesen alias rm='rm -i'. Aber soweit ich weiß, handelt es sich um einen temporären Alias, der so lange lebt, bis Sie das Terminal schließen.

Wie es erklärt wird Hier Um Alias ​​dauerhaft zu speichern, muss ich ausführen ~/.bash_aliases oder ~/.bashrc Befehle im Terminal und fügen Sie dort meinen Alias ​​hinzu. Aber wenn ich es ausführe ~/.bashrc Ich bekomme folgende Fehlermeldung:

bash: /home/bakhtiyor/.bashrc: Permission denied

Wenn ich renne ~/.bash_aliases Ich bekomme eine andere Fehlermeldung wie folgt:

bash: /home/bakhtiyor/.bash_aliases: File or directory doesn't exist.

Was ist das eigentliche Problem und wie kann ich es lösen?


308
2017-12-15 07:54


Ursprung


Wie hast du einen Alias ​​erstellt? - karthick87
@ karthick87. Ich habe meine Frage aktualisiert. - Bakhtiyor
ANTWORTEN - stackoverflow.com/a/2622711/1487102 - neaumusic


Antworten:


Um einen Alias ​​zu erstellen, fügen Sie den Alias ​​dauerhaft hinzu .bashrc Datei

gedit ~/.bashrc

Und füge dann unten deinen Alias ​​hinzu.

alt text

Jetzt ausführen . ~/.bashrc in Ihrem Terminal (zwischen den beiden sollte ein Leerzeichen stehen) . und ~/.bashrc.

Jetzt können Sie Ihren Alias ​​überprüfen.

alt text


342
2017-12-15 08:24



@ karthick87 du schreibst "Now execute. ~ / .bashrc in Deinem Terminal (da sollte eine Lücke zwischen der .und ~ / .bashrc sein.") Warum ist dieser Schritt nötig? - Geek
Was macht das erste "." tun in. ~ / .bashrc? - Zen
@Geek @Zen "Ausführen" war nicht der richtige Begriff. Der Punkt entspricht source. Mit . ~/.bashrc, du beziehst deine Bash. Das Ausführen der Datei würde einen untergeordneten Prozess starten, die Befehle in diesem Prozess ausführen und dann zurückgeben. Alles, was im untergeordneten Prozess getan wird, hat keine Auswirkungen auf den übergeordneten Prozess (die Bash, von der Sie ausgeführt haben). Stattdessen verhält sich das Sourcing (mit dem Punkt) genau so, als ob Sie den Inhalt der Datei im Terminal geschrieben hätten. Das ist, was du willst. .bashrc wird jedes Mal bezogen, wenn Sie eine Bash starten. Wenn Sie Änderungen vornehmen, werden sie erst angewendet, wenn Sie eine neue Bash oder Quelle manuell starten. - Gauthier
@ButtleButkus - möchte vielleicht nur die Einstellungen eines Benutzers ändern, anstatt das ganze System. In Ubuntu ist die systemweite .bashrc-Datei /etc/bash.bashrc - WillC
Dies funktioniert nur teilweise. Ich muss ausführen . ~/.bashrc jedes Mal wenn ich das Terminal öffne. Verwenden von OS X EI Captian (v10.11.6). - Shubham A.


Es gibt viele Möglichkeiten, einen Alias ​​zu erstellen. Die am häufigsten verwendeten Methoden sind:

  1. Fügen Sie Aliase direkt in Ihrem ein ~/.bashrc Datei

    Zum Beispiel: füge diese Zeile an an ~/.bashrc Datei

    alias ll='ls -l'
    alias rm='rm -i'
    

    Das nächste Mal (nachdem du dich ausgeloggt oder erledigt hast) . ~/.bashrc) wenn Sie tippen rm das rm -i Befehl wird ausgeführt.

  2. Mit der zweiten Methode können Sie eine separate Alias-Datei erstellen, sodass Sie sie nicht einfügen müssen .bashrc, aber zu einer Datei Ihrer Wahl. Bearbeiten Sie zuerst Ihre ~/.bashrc file und füge die folgenden Zeilen hinzu oder entferne sie, falls noch nicht geschehen

    if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
    fi
    

    Speichern Sie es und schließen Sie die Datei. Danach musst du nur noch ein erstellen ~/.bash_aliases Datei und fügen Sie dort Ihre Aliase hinzu, mit dem gleichen Format wie in der ersten Methode.

    Inhalt von meinem ~/.bash_aliases Datei:

    alias cs='cd;ls'
    

205
2017-12-15 08:21



+1 für die Verwendung ~/.bash_aliases. - ændrük
Ja, eine andere Datei für Aliase ist viel sauberer, auch portabel zwischen den Distributionen. Ich benutze diese Datei, weil einige Alias ​​nicht genug sind und eine Funktion benötigt wird. Es ist also viel sauberer, wenn Sie stattdessen eine Datei für diese Aufgabe verwenden. Ich habe einen anderen Alias ​​-> alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", so wurde der Aliasname beim Speichern verfügbar, und wenn Sie einen Fehler machen, wird er Sie anzeigen. - erm3nda
irgendwie nachdem ich den alias wie hinzugefügt habe alias ls='ls -althr'Einige der angegebenen Flags wurden nicht wirksam. In diesem Fall wurde das Flag -t nicht wirksam. weißt du, warum? - Sajuuk
Standardmäßig ~/.bashrc enthält Aufnahme für ~/.bash_aliases, keine Notwendigkeit, es zu bearbeiten. - Jaakko
Nicht immer ~ / .bashrc enthält inclusion für ~ / .bash_aliases wie in meinem Fall mit Ubuntu-Terminal Windows 10 diese Lösung kam sehr praktisch. - Jose


Das Problem ist, dass Sie versuchen, eine nicht ausführbare Datei auszuführen: Sie können dies überprüfen mit:

ls -la ~/.bashrc
-rw-r--r-- 1 username username 3596 2010-08-05 17:17 /home/pt001424/.bashrc

Hinweis: In der ersten Spalte gibt es keinen "x - executable" - Buchstaben (Dateiberechtigungen).

Profildateien sind keine ausführbaren Dateien, anstatt sie auszuführen, laden Sie sie mit:

source /home/bakhtiyor/.bashrc

oder

. /home/bakhtiyor/.bashrc

17
2017-12-15 10:24





Es klingt für mich wie Ihr einziges Problem ist einfach zu versuchen, .bashrc auszuführen, wenn es nicht ausführbar ist. Aber das ist nicht der richtige Weg; Wenn Sie eine Änderung an dieser Datei vornehmen, sollten Sie sie mit folgendem Befehl ausführen:

source ~/.bashrc

Andernfalls wird einfach eine neue Shell erstellt, die Datei in der Umgebung der neuen Shell ausgeführt und diese Umgebung beim Beenden verworfen, wodurch die Änderung verloren geht. Durch das Sourcen des Skripts wird es in der aktuellen Shell ausgeführt, sodass es in Kraft bleibt.

Ich nehme an, der zweite Fehler war, weil bash_aliases nicht existiert. Es ist nicht erforderlich, nur empfohlen, um Ihre Änderungen getrennt und organisiert zu halten. Es wird nur verwendet, wenn es existiert, und Sie können den Test dafür in .bashrc sehen:

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

Dies besagt, dass, wenn die Datei ~ / .bash_aliases existiert, dann führe sie aus.


15
2018-01-16 20:29



~/.bash_aliases ist besser. askubuntu.com/questions/194111/ ... - tomByrer
Verwendung der source Befehl gemacht meine Aliase arbeiten. +1 - dspacejs
Nur der Vollständigkeit halber: Der erste Punkt auf der Linie . ~/.bash_aliases hat die gleiche Bedeutung wie der eingebaute Shell-Befehl source. Ich finde dies die richtige Antwort und erkläre, was vor sich geht. - Melebius


echo "alias vps='ssh -X user@example.com'" >> ~/.bashrc

Dies ist ein Beispiel, nach dem ich gesucht habe, eine Möglichkeit, ein paar Buchstaben am Terminal einzugeben ("vps"), um sich remote bei einem Server anzumelden und die X11-Weiterleitung zu aktivieren, damit ich Apps wie "gedit" über das Netzwerk laufen lassen kann.

Was auch immer der Befehl / Alias-Befehl sein mag, dies funktioniert mit der Echo-Anweisung, Anführungszeichen und dem Symbol zum Anhängen der Ausgabe eines Befehls an eine Datei (>>). Ersetzen Sie einfach meinen Befehl für den benötigten Alias-Befehl und geben Sie ihn in Ihr Terminal ein.


8
2018-06-15 11:39



Das Zitat hier ist etwas schwierig. In diesem Beispiel ist die Verwendung von Anführungszeichen unproblematisch, aber wenn der Text in den Anführungszeichen Dollarzeichen, umgekehrte Schrägstriche usw. enthält, müssen Sie verstehen, wie die Shell sie in Anführungszeichen verarbeitet. Sie können auf einfache Anführungszeichen auf der Außenseite und doppelte Anführungszeichen auf der Innenseite umschalten, aber Sie müssen dann immer noch verstehen, wie Bash die doppelten Anführungszeichen in der Alias-Definition verarbeitet. - tripleee


Ich habe diese kleine Funktion gemacht, um schnell einen neuen Alias ​​in .bashrc zu schreiben

##------------------------------------ ##
 #           -- new-alias --           #
 # creates new alias & writes to file  #
 #          $1 = alias new             #
 #          $2 = alias definition      #
##------------------------------------ ##
new-alias () { 
  if [ -z "$1" ]; then
    echo "alias name:"
    read NAME
  else
    NAME=$1
  fi

  if [ -z "$2" ]; then
    echo "alias definition:"
    read DEFINTION
  else
    if [ "$2" = "-cd" ]; then
      DEFINTION='cd '
    else
      DEFINTION=$2
    fi
  fi

  echo "alias $NAME='$DEFINTION'" >> ~/.bashrc
  . ~/.bashrc
}

5
2017-12-17 20:37



Gute Idee, aber unvorsichtige Verwendung dieser Funktion kann zum Abfall führen .bashrc mit mehreren Instanzen von alias Befehl. Ihre Funktion muss definitiv einige Überprüfungen durchführen, um solche Unordnung zu vermeiden. - Troublemaker-DV


Wenn Sie Ruby verwenden, können Sie aka mit Rubygem installieren.

gem install aka2

Verwendung

aka generate hello="echo helloworld" #add an alias
aka g hello="echo helloworld"  #add alias for lazy people

aka destroy hello #remove alias
aka d hello #remove alias for lazy people

Der Rubygem wird Ihre Punktdatei automatisch so beschaffen, dass Sie sie nicht benötigen. Hör zu.


4
2018-01-21 14:14





Ich würde vorschlagen, zu verwenden /etc/bash.bashrc

Sie können am Ende dieser Datei eine Zeile hinzufügen.

alias ok="ping google.com"

Nachdem Sie die Aliase pro Zeile gesetzt haben, müssen Sie neu booten oder sich neu anmelden.


0
2017-08-09 03:36



"Ich würde vorschlagen ..." und warum sollten Sie das vorschlagen? - muru
Sie sollten sich nicht mit der Systemdatei anlegen, es sei denn, Sie möchten speziell eine systemweite Einstellung für alle Benutzer installieren. Auf einem persönlichen System ist der Unterschied marginal, aber das Durcheinander mit den Systemdateien ist im nachhinein komplizierter, also sollten Sie wahrscheinlich immer noch Ihre persönlichen Punktdateien für persönliche Vorlieben bevorzugen (und das Kopieren der Einstellungen woanders in die Zukunft auch). - tripleee
Neustart? Das ist wirklich ein schrecklicher Rat, tu das NICHT, besonders wenn source /etc/bash.bashrc alles was du willst in diesem Beispiel. Aber sollte verwenden ~/.bashrc oder ~/.bash_aliases stattdessen - Xen2050
@ Xen2050, ich schlug einen Neustart vor, um zu zeigen, dass es nach Neustart / Neuanmeldung funktioniert. Übrigens, auch ein anderes sauberes Terminalfenster wird funktionieren. - Fahad Ahammed
Sie können auf einen neuen Kernel upgraden, ohne das System neu zu starten; das sind keine alten Fenster ;-) - Xen2050