Domanda Come posso creare un alias di Bash permanente?


Mi piacerebbe creare un alias per rm comando per avere un messaggio di conferma dopo aver eseguito questo comando. Quindi sto creando un alias come questo alias rm='rm -i'. Ma per quanto ne so questo è un alias temporaneo e vive finché non chiudi il terminale.

Come è spiegato Qui per salvare in modo permanente alias ho bisogno di eseguire ~/.bash_aliases o ~/.bashrc comandi nel terminale e aggiungi il mio alias lì. Ma quando eseguo ~/.bashrc Ottengo il seguente messaggio di errore:

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

Quando corro ~/.bash_aliases Ricevo un altro messaggio di errore come questo:

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

Qual è il problema reale e come posso risolverlo?


308
2017-12-15 07:54


origine


Come hai creato un alias ?? - karthick87
@ Karthick87. Ho aggiornato la mia domanda. - Bakhtiyor
RISPOSTA - stackoverflow.com/a/2622711/1487102 - neaumusic


risposte:


Per creare un alias, aggiungi permanentemente l'alias al tuo .bashrc file

gedit ~/.bashrc

E poi aggiungi il tuo alias in fondo.

alt text

Ora esegui . ~/.bashrc nel tuo terminale (dovrebbe esserci uno spazio tra il . e ~/.bashrc.

Ora puoi controllare il tuo alias.

alt text


342
2017-12-15 08:24



@karthick87 hai scritto "Esegui ora. ~ / .bashrc nel tuo terminale (dovrebbe esserci uno spazio tra. e ~ / .bashrc.". Perché è necessario questo passo? - Geek
cosa fa il primo '.' fare dentro ~ / .bashrc? - Zen
@Geek @Zen "Esegui" non era il termine corretto. Il punto è equivalente a source. Con . ~/.bashrc, tu fonte la tua sconfitta. L'esecuzione del file avvia un processo figlio, esegue i comandi in questo processo e quindi restituisce. Tutto ciò che viene fatto nel processo figlio non ha alcun effetto sul processo genitore (la bash da cui è stato eseguito). Invece, il sourcing (con il punto) agisce esattamente come se avessi scritto il contenuto del file nel terminale. Questo è quello che vuoi. .bashrc è originato ogni volta che si avvia una bash. Se apporti modifiche, queste non verranno applicate fino a quando non inizierai una nuova bash o origine manualmente. - Gauthier
@ButtleButkus: potrebbe voler cambiare solo le preferenze di un utente piuttosto che l'intero sistema. In Ubuntu il file .bashrc di sistema è /etc/bash.bashrc - WillC
Funziona solo parzialmente. Ho bisogno di eseguire . ~/.bashrc ogni volta che apro il terminale. Utilizzo di OS X EI Captian (v10.11.6). - Shubham A.


Ci sono molti modi per creare un alias. I modi più utilizzati sono:

  1. Aggiungi alias direttamente nel tuo ~/.bashrc file

    Ad esempio: aggiungi questa linea a ~/.bashrc file

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

    La prossima volta (dopo aver effettuato il logout / in, o fatto . ~/.bashrc) quando si digita rm il rm -i il comando verrà eseguito.

  2. Il secondo metodo ti consente di creare un file di alias separato, quindi non dovrai inserirli .bashrc, ma a un file di tua scelta. Innanzitutto, modifica il tuo ~/.bashrc file e aggiungere o rimuovere le righe seguenti, se non lo è già

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

    Salvalo e chiudi il file. Dopodiché, tutto ciò che devi fare è creare un ~/.bash_aliases file e aggiungi i tuoi alias lì, con lo stesso formato specificato nel primo metodo.

    Contenuto del mio ~/.bash_aliases file:

    alias cs='cd;ls'
    

205
2017-12-15 08:21



+1 per l'utilizzo ~/.bash_aliases. - ændrük
Sì, usare un altro file per gli alias è molto più pulito, anche portatile tra le distro. Io uso quel file perché alcuni alias non sono sufficienti e serve una funzione. Quindi è molto più pulito se si utilizza un file per quell'attività. Ho un altro alias -> alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", quindi l'alias è diventato utile per il salvataggio, e se fai qualche errore ti farà pubblicità. - erm3nda
in qualche modo dopo ho aggiunto l'alias come alias ls='ls -althr'alcune delle bandiere fornite non hanno effetto, in questo caso il flag -t non ha avuto effetto. sai perché? - Sajuuk
Di default ~/.bashrc contiene l'inclusione per ~/.bash_aliases, non c'è bisogno di modificarlo. - Jaakko
Non sempre ~ / .bashrc contiene l'inclusione per ~ / .bash_aliases come nel mio caso con il terminale Ubuntu Windows 10 questa soluzione è stata molto utile. - Jose


Il problema è che stai provando ad eseguire un file non eseguibile: Puoi verificarlo con:

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

Nota: non c'è una lettera "x - eseguibile" sulla prima colonna (permessi dei file).

I file di profilo non sono file eseguibili, invece di eseguirli li carichi con:

source /home/bakhtiyor/.bashrc

o

. /home/bakhtiyor/.bashrc

17
2017-12-15 10:24





Mi sembra che il tuo unico problema stia semplicemente cercando di eseguire .bashrc quando non è eseguibile. Ma questo non è il modo corretto per farlo; ogni volta che apporti una modifica a questo file, dovresti "eseguirlo" con il comando:

source ~/.bashrc

Altrimenti, creerà semplicemente una nuova shell, eseguirà il file nel nuovo ambiente della shell, quindi scarterà quell'ambiente quando uscirà, perdendo così le tue modifiche. Acquistando lo script, viene eseguito all'interno della shell corrente, quindi rimarrà attivo.

Suppongo che il secondo errore sia dovuto al fatto che bash_aliases non esiste. Non è necessario, è solo consigliato per mantenere le tue modifiche separate e organizzate. Viene usato solo se esiste, e puoi vederne il test in .bashrc:

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

Questo dice che se il file ~ / .bash_aliases esiste, quindi eseguirlo.


15
2018-01-16 20:29



~/.bash_aliases è meglio. askubuntu.com/questions/194111/... - tomByrer
usando il source il comando ha fatto funzionare i miei alias. +1 - dspacejs
Solo per completezza: il punto iniziale sulla linea . ~/.bash_aliases ha lo stesso significato del comando integrato della shell source. Trovo che questa sia la risposta corretta, spiegando cosa sta succedendo. - Melebius


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

Questo è un esempio che stavo cercando, un modo per digitare alcune lettere sul terminale ("vps") per accedere da remoto a un server e abilitare l'inoltro X11 in modo da poter eseguire app gui come "gedit" sulla rete.

Qualunque sia il comando / comando alias, in questo modo con l'istruzione echo, le virgolette e il simbolo per accodare l'output di un comando a un file (>>) funziona per me. Basta sostituire il mio comando per il comando alias che ti serve e inserirlo nel tuo terminale.


8
2018-06-15 11:39



La citazione qui è leggermente complicata. In questo esempio, l'utilizzo di virgolette doppie non è problematico, ma se il testo tra virgolette contiene segni di dollaro, barre retroverse, ecc., È necessario comprendere come la shell le elabora tra virgolette. È possibile passare a virgolette singole all'esterno e virgolette all'interno, ma è comunque necessario capire come Bash elabora le virgolette nella definizione di alias. - tripleee


Ho fatto questa piccola funzione per scrivere rapidamente un nuovo alias in .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



Buona idea, ma l'uso imprudente di questa funzione potrebbe portare alla cestinazione .bashrc con più istanze di alias comando. La tua funzione ha sicuramente bisogno di implementare alcuni controlli per evitare tale disordine. - Troublemaker-DV


se stai usando ruby, puoi installare aka usando rubygem.

gem install aka2

uso

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

il rubygem auto-alimenterà il tuo file punto in modo da non averne bisogno. Controlla.


4
2018-01-21 14:14