Vraag Hoe maak ik een permanente Bash-alias aan?


Ik zou graag een alias willen maken rm commando om een ​​bevestigingsbericht te krijgen na het uitvoeren van deze opdracht. Dus ik maak een alias zoals deze alias rm='rm -i'. Maar voor zover ik weet is dit een tijdelijk alias en het leeft totdat je de terminal sluit.

Zoals het wordt uitgelegd hier om alias permanent op te slaan, moet ik uitvoeren ~/.bash_aliases of ~/.bashrc commando's in terminal en voeg daar mijn alias toe. Maar wanneer ik uitvoer ~/.bashrc Ik krijg de volgende foutmelding:

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

Wanneer ik ren ~/.bash_aliases Ik krijg een ander foutbericht zoals dit:

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

Wat is het eigenlijke probleem en hoe kan ik het oplossen?


308
2017-12-15 07:54


oorsprong


Hoe heb je een alias gemaakt ?? - karthick87
@ Karthick87. Ik heb mijn vraag bijgewerkt. - Bakhtiyor
ANTWOORD - stackoverflow.com/a/2622711/1487102 - neaumusic


antwoorden:


Als u een alias wilt maken, voegt u de alias permanent toe aan uw .bashrc het dossier

gedit ~/.bashrc

En voeg vervolgens uw alias onderaan toe.

alt text

Voer nu uit . ~/.bashrc in uw terminal (er zou een spatie moeten zijn tussen de . en ~/.bashrc.

Nu kunt u uw alias controleren.

alt text


342
2017-12-15 08:24



@ karthick87 je schreef "Now execute. ~ / .bashrc in je terminal (er zou een kloof moeten zijn tussen de. en ~ / .bashrc." Waarom is deze stap nodig? - Geek
wat doet de eerste '.' doe mee. ~ / .bashrc? - Zen
@Geek @ Zen "Uitvoeren" was niet de juiste term. De stip is gelijk aan source. Met . ~/.bashrc, bron jij je bash. Het uitvoeren van het bestand zou een kindproces starten, de commando's in dit proces uitvoeren en daarna terugkeren. Alles wat wordt gedaan in het onderliggende proces heeft geen effect op het bovenliggende proces (de bash waaruit u hebt uitgevoerd). In plaats daarvan werkt sourcing (met de punt) precies alsof je de inhoud van het bestand in de terminal hebt geschreven. Dit is wat je wilt. .bashrc wordt bij elke start van een bash ingekocht. Als u wijzigingen aanbrengt, zijn deze niet van toepassing totdat u handmatig een nieuwe bash of bron start. - Gauthier
@ButtleButkus - wil misschien de voorkeuren van slechts één gebruiker wijzigen in plaats van het hele systeem. In Ubuntu is het systeem-brede .bashrc bestand /etc/bash.bashrc - WillC
Dit werkt slechts gedeeltelijk. Ik moet uitvoeren . ~/.bashrc elke keer als ik de terminal open. OS X EI Captian gebruiken (v10.11.6). - Shubham A.


Er zijn veel manieren om een ​​alias te maken. De meest gebruikte manieren zijn:

  1. Voeg aliassen rechtstreeks toe in uw ~/.bashrc het dossier

    Bijvoorbeeld: voeg deze regel toe aan ~/.bashrc het dossier

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

    De volgende keer (nadat u bent uitgelogd / aangemeld of klaar bent . ~/.bashrc) wanneer u typt rm de rm -i commando zal worden uitgevoerd.

  2. Met de tweede methode kun je een apart aliassenbestand maken, dus je hoeft ze niet in te voegen .bashrc, maar naar een bestand van uw keuze. Bewerk eerst uw ~/.bashrc bestand en voeg de volgende regels toe of verwijder ze, als dit nog niet het geval is

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

    Sla het op en sluit het bestand. Daarna is alles wat u hoeft te doen een maken ~/.bash_aliases bestand en voeg daar uw aliassen toe, met hetzelfde formaat dat is opgegeven in de eerste methode.

    Inhoud van mijn ~/.bash_aliases het dossier:

    alias cs='cd;ls'
    

205
2017-12-15 08:21



+1 voor gebruik ~/.bash_aliases. - ændrük
Ja, het gebruik van een ander bestand voor aliassen is veel meer schoon, ook draagbaar tussen distributies. Ik gebruik dat bestand wel omdat sommige aliassen niet genoeg zijn en er een functie nodig is. Dus het is veel meer schoon als je in plaats daarvan een bestand voor die taak gebruikt. Ik heb een andere alias -> alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", dus het alias werd nuttig bij het opslaan, en als je een fout maakt, zal het je adverteren. - erm3nda
op de een of andere manier nadat ik de alias heb toegevoegd zoals alias ls='ls -althr', sommige van de opgegeven vlaggen zouden niet van kracht worden, in dit geval is de vlag -t niet van kracht. weet je waarom? - Sajuuk
Standaard ~/.bashrc bevat opname voor ~/.bash_aliases, het is niet nodig om het te bewerken. - Jaakko
Niet altijd ~ / .bashrc bevat opname voor ~ / .bash_aliases zoals in mijn geval met Ubuntu-terminal Windows 10 deze oplossing erg handig was. - Jose


Het probleem is dat je een niet-uitvoerbaar bestand probeert uit te voeren: U kunt dit controleren met:

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

Let op: er is geen "x - uitvoerbare" letter in de eerste kolom (bestandsrechten).

Profielbestanden zijn geen uitvoerbare bestanden, in plaats van ze uit te voeren, laadt u ze met:

source /home/bakhtiyor/.bashrc

of

. /home/bakhtiyor/.bashrc

17
2017-12-15 10:24





Het klinkt voor mij alsof je enige probleem gewoon is om .bashrc uit te voeren als het niet uitvoerbaar is. Maar dit is niet de juiste manier om het te doen; telkens wanneer u dit bestand wijzigt, moet u het "uitvoeren" met de opdracht:

source ~/.bashrc

Anders maakt het eenvoudigweg een nieuwe shell aan, voert het het bestand uit in de omgeving van de nieuwe shell en gooit vervolgens die omgeving weg wanneer deze wordt afgesloten, waardoor uw wijziging verloren gaat. Door het script te sourcen, wordt het binnen de huidige shell uitgevoerd, dus het blijft van kracht.

Ik neem aan dat de tweede fout was omdat bash_aliases niet bestaat. Het is niet verplicht, alleen aan te raden om uw wijzigingen gescheiden en georganiseerd te houden. Het wordt alleen gebruikt als het bestaat, en je kunt de test ervan zien in .bashrc:

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

Dit zegt dat als het bestand ~ / .bash_aliases bestaat, voer het dan uit.


15
2018-01-16 20:29



~/.bash_aliases is beter. askubuntu.com/questions/194111/... - tomByrer
de ... gebruiken source commando maakte mijn aliassen werken. 1 - dspacejs
Alleen voor de volledigheid: de eerste punt op de regel . ~/.bash_aliases heeft dezelfde betekenis als het shell-ingebouwd commando source. Ik vind dit het juiste antwoord, en leg uit wat er aan de hand is. - Melebius


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

Dit is een voorbeeld waar ik naar op zoek was, een manier om een ​​paar letters in de terminal ("vps") te typen om op afstand in te loggen op een server en X11-forwarding in te schakelen, zodat ik gui-apps zoals "gedit" via het netwerk kan uitvoeren.

Wat de opdracht / aliased-opdracht ook is, op deze manier met de echo-instructie, aanhalingstekens en het symbool voor het toevoegen van de uitvoer van een opdracht aan een bestand (>>) werkt voor mij. Vervang gewoon mijn opdracht voor het alias-commando dat u nodig hebt en voer het in uw terminal in.


8
2018-06-15 11:39



Het citaat hier is enigszins lastig. In dit voorbeeld is het gebruik van dubbele aanhalingstekens niet problematisch, maar als de tekst binnen de aanhalingstekens dollartekens, backslashes, enzovoort bevat, moet u weten hoe de shell deze verwerkt binnen dubbele aanhalingstekens. U kunt overschakelen naar enkele aanhalingstekens aan de buitenkant en dubbele aanhalingstekens aan de binnenkant, maar u moet dan nog steeds begrijpen hoe Bash de dubbele aanhalingstekens in de aliasdefinitie verwerkt. - tripleee


Ik heb deze kleine functie gemaakt voor het snel schrijven van een nieuw-alias naar .bashrc

##------------------------------------ ##
 #           -- 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



Goed idee, maar onzorgvuldig gebruik van deze functie kan leiden tot trashing .bashrc met meerdere exemplaren van alias opdracht. Uw functie moet beslist enkele controles uitvoeren om dergelijke rommel te voorkomen. - Troublemaker-DV


als je robijn gebruikt, kun je aka met rubygem installeren.

gem install aka2

gebruik

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

de rubygem zal uw puntbestand automatisch genereren, zodat u dat niet hoeft te doen. Bekijken.


4
2018-01-21 14:14





Ik zou voorstellen om te gebruiken /etc/bash.bashrc

U kunt een regel toevoegen aan het einde van dat bestand.

alias ok="ping google.com"

Na het plaatsen van de aliassen per regel moet je rebooten of opnieuw inloggen.


0
2017-08-09 03:36



"Ik zou voorstellen ..." en waarom zou u dat voorstellen? - muru
U zou niet moeten rotzooien met het systeembestand, tenzij u specifiek een systeembrede instelling voor alle gebruikers wilt installeren. Op een persoonlijk systeem is het verschil marginaal, maar dan is het knoeien met systeembestanden meer gecompliceerd onderweg, dus je zou waarschijnlijk nog steeds je eigen persoonlijke puntbestanden moeten verkiezen voor persoonlijke voorkeuren (en dat maakt het gemakkelijker om de instellingen ergens anders in te kopiëren de toekomst ook). - tripleee
Reboot? Dat is echt een vreselijk advies, doe dat NIET, vooral wanneer source /etc/bash.bashrc doet alles wat je wilt in dit voorbeeld. Maar zou moeten gebruiken ~/.bashrc of ~/.bash_aliases in plaats daarvan - Xen2050
@ Xen2050, ik stelde voor reboot om te laten zien dat het werkt na reboot / relogin. Overigens zal zelfs een ander schoon eindvenster ook werken. - Fahad Ahammed
Je kunt upgraden naar een nieuwe kernel zonder opnieuw op te starten, dit zijn geen oude vensters ;-) - Xen2050