Perché l'impostazione dell'alias in .profile non funziona?


11

Ho questo come ultima riga nel mio .profile:

alias gl="cd /home/jrenner/glances/glances"

eppure anche dopo il riavvio ottengo il comando non trovato quando si digita gl. Che cosa sta succedendo? Ho effettuato l'accesso come utente corretto.


Dove stai scrivendo gl? Il terminale? La GUI?
Thomas Ward

1
Nessuno ha mai affrontato l'originale perché? domanda. Posso confermare che gli alias definiti .profilenon funzionano in nessun contesto che ho provato: accessi alla console di testo, terminali grafici o qualsiasi altra cosa, anche se le variabili ambientali dallo stesso file funzionano.
Daniel Mahler,

@DanielMahler, hai un motivo per cui?
Maged Saeed

Risposte:


4

Sono abbastanza sicuro che l'idea di lpanebr funzionerà, ma ecco una soluzione più elegante. Esegui quel comando alias in .bashrc Ecco come lo faccio, o alcune persone preferiscono aggiungere un file dedicato all'alias. Chiamalo .aliaso qualsiasi altra cosa e aggiungi .aliasal tuo.bashrc

Vorrei poter fare la formattazione come @lpanelbr. Mi chiedo se esiste una wiki?


1
Per quanto riguarda la formattazione, askubuntu utilizza markdown. Controlla askubuntu.com/editing-help per i dettagli.
saji89,

1
Perché .bashrcfunziona mentre .profileno? Inoltre, qualsiasi motivo per cui hai scelto di nominare il file alias .alliasanziché .alias?
Tom,

# 1 Da quello che ho capito .bashrc è specifico per bash e .profile è specifico per la riga di comando non bash. # 2 Non so cosa intendi. Posso scrivere dopo tutto. (a cura di)
Jason

7

Esistono due motivi correlati per cui gli alias non funzionano sempre quando vengono inseriti nel .profilefile. Il primo è che il file .profile(o .bash_profile) viene eseguito solo per una shell di accesso. Se stai avviando bash in una finestra di terminale sotto X, il tuo emulatore di terminale (ad es. Gnome-termanl) probabilmente non sta eseguendo bash come shell di login. [La maggior parte ha un'opzione per cambiarla se lo si desidera, ma l'impostazione predefinita (per gnome-termal comunque) non è eseguirla come shell di login.]
La shell sarà una shell interattiva e quindi .bashrcverrà eseguita.

Tuttavia, normalmente bash è stato eseguito come shell di login all'indietro all'avvio della sessione X. Quindi se ci sono comandi alias in .profileessi saranno stati eseguiti insieme all'impostazione di variabili d'ambiente come il PERCORSO ecc. Quando viene aperta una finestra terminale viene lanciata una nuova istanza di bash per richiedere ed eseguire comandi in quella finestra terminale. A differenza delle variabili di ambiente, gli alias non possono essere esportati da un'istanza di bash a una nuova avviata da essa. Quindi gli alias non vengono passati alla nuova shell.

Per vedere questo, prova questo esperimento:

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james

Nota che .bashrcnon viene eseguito da bash quando viene avviato come shell di accesso. Quindi mettere i tuoi alias lì non funzionerà sempre a meno che tu non .bashrcprovenga dal tuo .profile, che è una pratica molto comune.


Verificati: aggiungendo source .bashrcnel .bash_profilepermesso del set alias nel .bashrc al lavoro.
Treefish Zhang

Sembra che questa dovrebbe essere la risposta corretta. Inoltre, in Ubuntu aggiungi semplicemente i tuoi alias ~/.bash_aliases. Questo è il modo giusto per farlo. (leggi il file .bashrc per i dettagli).
Emilio M.,

0

Se stai usando bash ( echo $SHELL) come interprete di shell, penso che sia meglio (o forse l'unico modo) se definisci la tua funzione CD.

Modifica il tuo .bashrcfile e aggiungi alla fine quanto segue:

# my custom functions:
function gl () {
   cd /home/jrenner/glances/glances/
}

Potresti anche estenderlo in questo modo:

# my custom functions:
function cdw () {
   cd /home/jrenner/glances/glances/$1
   ls
}

e passare direttamente a una sottodirectory ed elencarne i contenuti.


1
Questo può essere un ottimo suggerimento, ma non è una risposta, in quanto non spiega perché la aliasdirettiva inserita nel .profilefile fallisce.
Tom,

0
$ bash #start a new bash instance

Questo era un problema con il mio server. Semplice source .profilenon ha funzionato per qualche motivo


0

Il modo giusto per farlo in Ubuntu è aggiungere il tuo alias a ~/.bash_aliases. Crea il file se non esiste.

Questo file (se presente) viene chiamato per impostazione predefinita ~/.bashrce l'alias sarà disponibile anche negli emulatori di terminale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.