Wie erstelle ich einen permanenten Bash-Alias?

382

Ich möchte einen Alias ​​für den rmBefehl erstellen, um nach Ausführung dieses Befehls eine Bestätigungsmeldung zu erhalten. Also erstelle ich einen Alias ​​wie diesen alias rm='rm -i'. Soweit ich weiß, handelt es sich jedoch um einen vorübergehenden Alias, der so lange besteht, bis Sie das Terminal schließen.

Wie erläutert , wird hier alias permanent speichern muss ich ausführen ~/.bash_aliasesoder ~/.bashrcBefehle in Terminal und mein Alias dort hinzuzufügen. Beim Ausführen ~/.bashrcerhalte ich jedoch folgende Fehlermeldung:

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

Beim Ausführen ~/.bash_aliaseserhalte ich folgende Fehlermeldung:

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

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

Bakhtiyor
quelle
2
ANTWORT - stackoverflow.com/a/2622711/1487102
neaumusic
alias rm='rm -i'löst nicht das problem der
wahllosen verwendung

Antworten:

429

Um einen Alias ​​dauerhaft zu erstellen, fügen Sie den Alias ​​zu Ihrer .bashrcDatei hinzu

gedit ~/.bashrc

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

Alt-Text

Führen . ~/.bashrcSie nun in Ihrem Terminal aus (zwischen .und sollte ein Leerzeichen stehen) ~/.bashrc.

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

Alt-Text

karthick87
quelle
5
@ karthick87 du hast geschrieben: "Nun führe. ~ / .bashrc in deinem Terminal aus (es sollte eine Lücke zwischen. und ~ / .bashrc geben." Warum wird dieser Schritt benötigt?
Geek
5
was macht das erste '.' machen in. ~ / .bashrc?
Zen
22
@Geek @Zen "Execute" war nicht der richtige Begriff. Der Punkt entspricht source. Mit . ~/.bashrcbeschaffen Sie Ihre Bash. Das Ausführen der Datei würde einen untergeordneten Prozess starten, die Befehle in diesem Prozess ausführen und dann zurückkehren. Alles, was im untergeordneten Prozess ausgeführt wird, hat keine Auswirkungen auf den übergeordneten Prozess (die Bash, von der aus Sie ausgeführt haben). Stattdessen verhält sich das Sourcing (mit dem Punkt) genau so, als ob Sie den Inhalt der Datei in das Terminal geschrieben hätten. Das ist, was du willst. .bashrcwird jedes Mal bezogen, wenn Sie eine Bash starten. Wenn Sie Änderungen vornehmen, werden diese erst wirksam, wenn Sie eine neue Bash oder Quelle manuell starten.
Gauthier
@ButtleButkus - Möglicherweise möchten Sie nur die Einstellungen eines Benutzers und nicht das gesamte System ändern. In Ubuntu ist die systemweite .bashrc-Datei /etc/bash.bashrc
WillC
1
@ShubhamA. Siehe diese Frage für das OSX-Verhalten
jandersen
253

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

  1. Fügen Sie Aliase direkt in Ihre ~/.bashrcDatei ein

    Zum Beispiel: Hänge diese Zeile an die ~/.bashrcDatei an

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

    Das nächste Mal (nach dem Abmelden / Anmelden oder Fertigstellen . ~/.bashrc), wenn Sie rmden rm -iBefehl eingeben, wird ausgeführt.

  2. Mit der zweiten Methode können Sie eine separate Aliase-Datei erstellen, sodass Sie sie nicht .bashrcin einer Datei Ihrer Wahl ablegen müssen. Bearbeiten Sie zunächst Ihre ~/.bashrcDatei und fügen Sie die folgenden Zeilen hinzu, falls sie noch nicht vorhanden sind, oder entfernen Sie die Kommentare, falls dies der Fall ist:

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

    Speichern Sie es und schließen Sie die Datei. Danach müssen Sie nur noch eine ~/.bash_aliasesDatei erstellen und dort Ihre Aliase mit demselben Format wie in der ersten Methode hinzufügen.

    Inhalt meiner ~/.bash_aliasesDatei:

    alias cs='cd;ls'
aneeshep
quelle
71
+1 für die Verwendung ~/.bash_aliases.
ændrük
Ja, die Verwendung einer anderen Datei für Aliase ist viel sauberer und auch zwischen Distributionen portierbar. Ich benutze diese Datei, weil einige Alias ​​nicht ausreichen 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", also wurde der Alias ​​beim Speichern nutzbar, und wenn Sie einen Fehler machen, wird er Sie ankündigen.
erm3nda
Irgendwie, nachdem ich den Alias ​​hinzugefügt habe alias ls='ls -althr', haben einige der angegebenen Flags keine Wirkung gezeigt. In diesem Fall hat das -t-Flag keine Wirkung gezeigt. wissen Sie, warum?
Sajuuk
3
Standardmäßig ~/.bashrcenthält Inklusion für ~/.bash_aliases, muss nicht bearbeitet werden.
Jaakko
1
Nicht immer enthält ~ / .bashrc eine Aufnahme für ~ / .bash_aliases, wie es in meinem Fall mit dem Ubuntu-Terminal Windows 10 sehr praktisch war.
Jose
19

Es hört sich für mich so an, als ob Ihr einziges Problem darin besteht, einfach .bashrc auszuführen, wenn es nicht ausführbar ist. Dies ist jedoch nicht der richtige Weg. Wann immer Sie eine Änderung an dieser Datei vornehmen, sollten Sie diese mit dem folgenden 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 Ihre Änderung verloren geht. Durch das Aufrufen 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 zu empfehlen, 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, sie ausgeführt wird.

Marty Fried
quelle
~/.bash_aliasesist besser. askubuntu.com/questions/194111/…
tomByrer
1
Mit dem sourceBefehl funktionierten meine Aliase. +1
dspacejs
4
Der Vollständigkeit halber: Der anfängliche Punkt in der Zeile . ~/.bash_aliaseshat dieselbe Bedeutung wie der in die Shell integrierte Befehl source. Ich finde das die richtige Antwort und erkläre, was los ist.
Melebius
17

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

Beachten Sie, dass sich in der ersten Spalte kein Buchstabe "x - ausführbar" befindet (Dateiberechtigungen).

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

source /home/bakhtiyor/.bashrc

oder

. /home/bakhtiyor/.bashrc
João Pinto
quelle
7
echo "alias vps='ssh -X [email protected]'" >> ~/.bashrc

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

Was auch immer der Befehl / Alias-Befehl ist, dieser Weg mit der Echo-Anweisung, den Anführungszeichen und dem Symbol zum Anhängen der Ausgabe eines Befehls an eine Datei (>>) funktioniert für mich. Ersetzen Sie einfach meinen Befehl durch den gewünschten Alias-Befehl und geben Sie ihn in Ihr Terminal ein.

user80638
quelle
Das Zitieren hier ist etwas knifflig. In diesem Beispiel ist die Verwendung von doppelten Anführungszeichen unproblematisch. Wenn der Text in den Anführungszeichen jedoch Dollarzeichen, umgekehrte Schrägstriche usw. enthält, müssen Sie verstehen, wie die Shell sie in doppelten Anführungszeichen verarbeitet. Sie können außen zu einfachen Anführungszeichen und innen zu doppelten Anführungszeichen wechseln, müssen dann aber noch verstehen, wie Bash die doppelten Anführungszeichen in der Aliasdefinition verarbeitet.
Tripleee
5

Wenn Sie Ruby verwenden, können Sie auch Rubygem installieren.

gem install aka2

Verwendungszweck

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

Das Rubygem generiert automatisch eine Quelle für Ihre Punktedatei, sodass Sie dies nicht benötigen. Hör zu.

ytbryan
quelle
4

Ich habe diese hilfreiche Funktion geschrieben, um schnell einen neuen Alias ​​zu erstellen und dann die Aliasdefinition an ~/.bash_aliases (falls vorhanden) oder zu schreiben ~/.bashrc.

TIPP : Stellen Sie sicher ~/.bash_aliases, dass & in ausgeführt wird ~/.bashrc.

# -----------------------------------
#  Create a new permanent bash alias
#
#  @param $1 - name
#  @param $2 - definition
# -----------------------------------
new-alias () { 
  if [ -z "$1" ]; then
    echo "alias name:" && read NAME
  else
    NAME=$1
  fi

  if alias $NAME 2 > /dev/null > /dev/null; then
    echo "alias $NAME already exists - continue [y/n]?" && read YN
    case $YN in
      [Yy]* ) echo "okay, let's proceed.";;
      [Nn]* ) return;;
      * ) echo "invalid response." && return;;
    esac
  fi

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

  if [ -f ~/.bash_aliases ]; then
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bash_aliases
  else
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bashrc
  fi

  alias $NAME="$DEFINTION"
}
blizzrdof77
quelle
1
Gute Idee, aber die unachtsame Verwendung dieser Funktion kann zum Papierkorb .bashrcmit mehreren aliasBefehlsinstanzen führen. Ihre Funktion muss auf jeden Fall einige Überprüfungen durchführen, um eine solche Unordnung zu vermeiden.
Unruhestifter-DV
Dies ist ein gültiger Punkt. Haben Sie einen Lösungsvorschlag, den Sie gerne an Troublemaker-DV weitergeben möchten?
Blizzrdof77
Unsicher, ob es noch 2 1/2 Jahre später aktuell ist, aber ... Am 1. würde ich die RC nach Alias-Befehlen durchsuchen, um zu überprüfen, ob dieser Alias ​​bereits dort eingegeben wurde, um Duplikate zu vermeiden. Ihre Überprüfung auf das Vorhandensein eines Alias ​​reicht nicht aus, da der RC bereits mit mehreren Aliasen des gleichen Namens "kontaminiert" sein könnte.
Unruhestifter-DV
0

Ich würde vorschlagen, mit /etc/bash.bashrc

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

alias ok="ping google.com"

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

Fahad Ahammed
quelle
7
"Ich würde vorschlagen .." und warum würden Sie das vorschlagen?
Muru
2
Sie sollten nicht mit der Systemdatei herumspielen, es sei denn, Sie möchten ausdrücklich eine systemweite Einstellung für alle Benutzer installieren. Auf einem persönlichen System ist der Unterschied gering, aber das Durcheinander mit Systemdateien ist später komplizierter. Daher sollten Sie Ihre persönlichen Punktedateien aus persönlichen Gründen immer noch bevorzugen (und dies erleichtert das Kopieren der Einstellungen an eine andere Stelle in auch die Zukunft).
Tripleee
1
Neustart? Das ist wirklich ein schrecklicher Rat, tun Sie das NICHT, besonders wenn source /etc/bash.bashrcSie in diesem Beispiel alles tun, was Sie wollen. Aber sollte verwenden ~/.bashrcoder ~/.bash_aliasesstattdessen
Xen2050 18.01.18
@ Xen2050, ich schlug einen Neustart vor, um zu zeigen, dass er nach dem Neustart / Neustart funktioniert. Übrigens wird auch ein anderes sauberes Terminalfenster funktionieren.
Fahad Ahammed
1
Sie können ohne Neustart auf einen neuen Kernel aktualisieren, ist dies nicht alte Fenster ;-)
Xen2050
0

Wie ich mich erinnere, bashrc gab oder gab es eine Zeile, die vorschlug, sie nicht direkt für Aliase zu verwenden. Die Lösung besteht darin, eine oder mehrere externe Dateien zu verwenden. Die Aliase foound barwurden hinzugefügt, aber um bazdie bashrcDatei hinzuzufügen , muss sie "Quelle" sein (oder öffnen Sie einfach ein neues Terminal). Beispiel als:

thufir@dur:~$ 
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$ 
thufir@dur:~$ cat .bash_aliases 
alias foo='echo foo'
alias bar='echo foo'
alias baz='echo baz'

thufir@dur:~$ 
thufir@dur:~$ source .bashrc 
thufir@dur:~$ 
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias baz='echo baz'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$ 
thufir@dur:~$ baz
baz
thufir@dur:~$ 

jetzt bazfunktioniert der alias. Ich habe nur realisiert gerade jetzt , dass eine frühere Antwort hatte erwähnt , diese Technik, aber sie hatten die lede begraben.

Thufir
quelle